1) Exemplificare ierarhie de clase (redeclararea datelor membru şi supraîncarcarea functiilor membru ale claselor de baza în clasa derivata) (rezolvare...)
2) Exemplificare constructorii în ierarhii de clase (rezolvare...)
C: Mostenirea simpla - aplicatii rezolvate
Rezolvari
#include <iostream> using namespace std; #include<conio.h> #include<stdlib.h> #include<math.h> #include <fstream> class numar { protected: int n; public: void afis(char* s) { cout<<"Numarul "<<s<<" este: "<<n<<endl; } int retur() { return n; } }; class numar_d1: public numar { public: void cit(char *s) { cout<<"Citim numarul "<<s<<endl; cout<<"\tn="; cin>>n; } void aduna(numar_d1 a, numar b) { n=a.n+b.retur(); } }; class numar_d2: public numar_d1 { //se mai introduce o data privata si se cere retinerea in acesta a patratului numarului declarat precedent int n; public: numar_d2 operator*() { numar_d2 a; a.n=(numar::n+2); return a; } void afis() { cout<<"Rezultatul dorit este (am adunat 2 la rezultat): "<<n<<endl; } }; void main() { numar_d2 a,b,c; a.cit("a"); b.cit("b"); c.aduna(a,b); c.numar_d1::afis("a+b"); numar_d2 d; d=*c; d.afis(); int k; cin>>k; }
#include <iostream> using namespace std; class numar { protected: int n; public: numar(int a=5) { n=a; cout<<"Costructorul clasei de baza.\n"; } int& retur() { return n; } friend ostream& operator<<(ostream& out,numar a) { out<<"Numarul este: "<<a.n<<endl; return out; } }; class numar_d: public numar { public: numar_d(int a=10):numar(a) //:numar(a) nu e neaparat obligatoriu a se scrie, acest lucru facandu-se atunci cand avem mai multi constructori in clasa de baza { cout<<"Costructorul clasei derivate.\n"; n=a; } /* - unui obiect dintr-o clasa de baza i se poate atribui un obiect al unei clase care este derivata din ea - unui obiect al unei clase derivate nu i se poate atribui un obiect al clasei de baza, deoarece o clasa derivata este o completare a unei clase de baza si nu invers (Putem insa sa inzestram clasa derivata cu o metoda obtinuta prin supraincarcarea operatorului =. Dar si aici datele care apartin exclusiv exclusiv clasei derivate iau valori arbitrare.) */ void operator=(numar & x) { n=x.retur(); } }; void main() { numar a; cout<<a; numar_d b; cout<<b; b=a; //acest lucru nu ar fi fost posibil fara supraincarcarea operatorului = cout<<b; int k; cin>>k; }