Tuesday, December 29, 2015

Limbajul C++. Implementarea unei aplicatii cu clase derivate


Urmatorul enunt reprezinta un assignment aferent uneia dintre lectiile din cadrul cursului "Bazele programarii C++" sustinut la InfoAcademy.

Aceasta prezentare nu are intentia de a compromite procesul didactic, ci de a oferi o perspectiva asupra felului in care sunt prezentate in viata reala cerintele de implementare a unui proiect.

Enuntarea si implementarea cerintelor sunt abordate pas cu pas.

Se lucreaza intr-un spatiu de nume intitulat "Assignment9".

Declaratiile de clase sunt salvate in fisiere header (.h). Definitiile sunt salvate in fisiere sursa (.cpp).


1. Sa se implementeze clasa "Procesor".

Atribute private:
_tip (string);
_frecventa (double);

Metode publice:
- constructor: Procesor(const string &tip = "ARM", double frecventa = 1.0);
- getter string Tip() const, returneaza tipul;
- getter double Frecventa() const, returneaza frecventa.

Implementare:

Fisierul "procesor.h"
-----
#ifndef _PROCESOR_H_
#define _PROCESOR_H_
#include <string>

using namespace std;
namespace Assignment9
{
   class Procesor
   {
         string _tip;
         double _frecventa;
         public:
         Procesor(const string &tip = "ARM", double frecventa = 1.0);
         string Tip() const;
         double Frecventa() const;
   };
}

#endif
-----
Fisierul "procesor.cpp"
-----
#include "procesor.h"

namespace Assignment9
{

Procesor::Procesor(const string &tip, double frecventa) : _tip(tip), _frecventa(frecventa)
{}
string Procesor::Tip() const
{
       return _tip;
}

double Procesor::Frecventa() const
{
       return _frecventa;
}

}
-----

2. Sa se implementeze clasa "Tableta".

Atribute private:

_nume  ( string);
_diagonala ( double);

Atribute protected:

_procesor  (tip Procesor, definit anterior).

Metode publice:

- constructor Tableta (const string &nume = "", double diagonala = 7.0, Procesor procesor = Procesor("ARM",1.5));
- destructor virtual;
- metoda abstracta virtual void Display() const;
- getter string Nume() const  - returneaza numele;
- getter double Diagonala() const  - returneaza diagonala.

Implementare:

Fisierul "tableta.h"
-----
#include <iostream>
#include "procesor.h"

using namespace std;

namespace Assignment9
{
    class Tableta
    {
       string _nume;
       double _diagonala;
       protected:
       Procesor _procesor;
       public:
       Tableta(const string &nume = "", double diagonala = 7.0, Procesor procesor = Procesor("ARM", 1.5));
       virtual ~Tableta();
       string Nume() const {return _nume;}
       double Diagonala() const {return _diagonala;}
       virtual void Display() const = 0;
       };
}
#endif
-----

Fisierul "tableta.cpp"

-----
#include "tableta.h"

namespace Assignment9
{

Tableta::Tableta(const string &nume, double diagonala, Procesor procesor): _nume(nume), _diagonala(diagonala), _procesor(procesor)
{}

Tableta::~Tableta(){};
}
-----

3-4. Sa se implementeze clasele "SamsungGalaxy" si "IPadMini", ambele derivate public din clasa "Tableta"

Se vor modifica fisierele "tableta.h" si "tableta.cpp" in conformitate cu urmatoarele specificatii:

Clasa SamsungGalaxy.

Metode publice:

- SamsungGalaxy - initializeaza atributul nume din clasa de baza cu "Samsung Galaxy" si diagonala cu 7.0;
 - void Display() const - afiseaza, folosind metodele deja specificate, numele, diagonala si frecventa in formatul: Samsung Galaxy 7" 1.5GHz.

Clasa IPadMini.

Metode publice:

- constructor IPadMini,  initializeaza atributul nume cu "iPad mini" si atributul diagonala cu valoarea 7.9;

- void Display() const - afiseaza, folsind metodele, atributele nume, diagonala si frecventa in formatul: iPad Mini 7.9" 1.5GHz

Fisierele "tableta.h" si "tableta.cpp" se vor modifica pe baza acestor ultime specificatii:
-----

Fisierul "tableta.h"


-----
#ifndef _TABLETA_H_
#define _TABLETA_H_
#include <string>
#include <iostream>
#include "procesor.h"

using namespace std;

namespace Assignment9
{
    class Tableta
    {
       string _nume;
       double _diagonala;
       protected:
       Procesor _procesor;
       public:
       Tableta(const string &nume = "", double diagonala = 7.0, Procesor procesor = Procesor("ARM", 1.5));
       virtual ~Tableta();
       string Nume() const {return _nume;}
       double Diagonala() const {return _diagonala;}
       virtual void Display() const = 0;
    };
                 
    class SamsungGalaxy : public Tableta
    {
          public:
          SamsungGalaxy(const string &nume = "Samsung Galaxy", double diagonala = 7.0);
          void Display() const
          {
           cout << Nume() <<" " << Diagonala() <<"\"" << " " << _procesor.Frecventa();
          }
    };
   
    class IPadMini : public Tableta
    {
          public:
          IPadMini(const string &nume = "IPad Mini", double diagonala = 7.9);
          void Display() const
          {
           cout << Nume() <<" " << Diagonala() <<"\"" << " " << _procesor.Frecventa();
          }
    };
}

#endif
-----
Fisierul "tableta.cpp"
-----
#include "tableta.h"

namespace Assignment9
{

Tableta::Tableta(const string &nume, double diagonala, Procesor procesor): _nume(nume), _diagonala(diagonala), _procesor(procesor)
{}
Tableta::~Tableta(){};

SamsungGalaxy::SamsungGalaxy(const string &nume, double diagonala) : Tableta(nume, diagonala)
{}

IPadMini::IPadMini(const string &nume, double diagonala) : Tableta(nume, diagonala)
{}         

}
-----
Fisierul functiei main (main.cpp)
-----

#include "procesor.h"
#include "tableta.h"

using namespace Assignment9;


int main()
{
    SamsungGalaxy s;
    s.Display();
    IPadMini i;
    cout <<"\n";
    i.Display();
    return 0;

}

Print screen-ul executiei:


No comments:

Post a Comment