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