Sa se implementeze o clasa ce exemplifica conceptul de mostenire virtuala.
#include <conio.h>
#include <iostream>
using namespace std;
class B {
protected:
int b;
public:
B(int b = 0){
this->b=b;
cout <<"Apel constructor clasa B("<<b<<")"<<endl;
}
void print(){
cout<<"In B b="<<b<<endl;
}
};
class B1: virtual public B{
protected:
int b1;
public:
B1(int b1, int b=1):B(b){
this->b1 = b1;
cout <<"Apel constructor clasa B1"<<endl;
}
void print(){
cout<<"In B1 b="<<b<<", b1="<<b1<<endl;
}
};
class B2: virtual public B{
protected:
int b2;
public:
B2(int b2, int b=2):B(b){
this->b2 = b2;
cout <<"Apel constructor clasa B2"<<endl;
}
void print(){
cout<<"In B2 b="<<b<<", b2="<<b2<<endl;
}
};
class D: public B1, public B2 {
public:
D(int b, int b1, int b2): B1(b1), B2(b2), B(b){
cout <<"Apel constructor clasa D"<<endl;
}
void print(){
cout<<"In D b="<<b<<", b1="<<b1<<", b2="<<b2<<endl;
}
};
int main (){
D d(0,1,2);
d.print();
d.B1::print();
d.B2::print();
}
In urma rularii programului se obtine urmatorul output:
Apel constructor clasa B(0) Apel constructor clasa B1 Apel constructor clasa B2 Apel constructor clasa D In D b=0, b1=1, b2=2 In B1 b=0, b1=1 In B2 b=0, b2=2
Sa se implementeze o clasa ce reprezinta notiunea de "plansa de desen". O plansa de desen este formata dintr-o multime de figuri geometrice precum: cercuri, deptunghiuri, patrate, etc.
#include <conio.h>
#include <iostream>
using namespace std;
class Punct {
float x,y;
public:
Punct(float x = 0, float y = 0);
void setX(float x);
float getX();
void setY(float y);
float getY();
friend ostream & operator << (ostream &out, Punct &p);
};
Punct:: Punct(float x, float y){
this->x = x; this->y = y;
}
void Punct::setX(float x){
this->x = x;
}
float Punct::getX(){
return x;
}
void Punct::setY(float y){
this->y = y;
}
float Punct::getY(){
return y;
}
ostream & operator << (ostream &out, Punct &p){
out<<"("<<p.x<<","<<p.y<<")";
return out;
}
class FiguraGeometrica {
public:
virtual void print();
virtual ~FiguraGeometrica();
};
void FiguraGeometrica::print(){
cout<<"Figura Geometrica Oarecare"<<endl;
}
FiguraGeometrica::~FiguraGeometrica(){
cout<<"Apel destructor FiguraGeometrica"<<endl;
}
class Cerc: public FiguraGeometrica {
Punct centru;
float raza;
public:
Cerc (Punct c, float r);
Cerc::~Cerc();
void print();
};
Cerc::Cerc(Punct c, float r):centru(c), raza(r){
}
void Cerc::print(){
cout<<"Cerc ("<<centru<<","<<raza<<")"<<endl;
}
Cerc::~Cerc(){
cout<<"Apel destructor Cerc"<<endl;
}
class Dreptunghi: public FiguraGeometrica {
Punct colt_s_s; //colt stanga sus
Punct colt_d_j; //colt dreapta jos
public:
Dreptunghi (Punct c_s_s, Punct c_d_j);
~Dreptunghi();
void print();
};
Dreptunghi::Dreptunghi(Punct c_s_s, Punct c_d_j): colt_s_s(c_s_s), colt_d_j(c_d_j){
}
void Dreptunghi::print(){
cout<<"Dreptunghi ["<<colt_s_s<<","<<colt_d_j<<"]"<<endl;;
}
Dreptunghi::~Dreptunghi(){
cout<<"Apel destructor Dreptunghi"<<endl;
}
class Plansa {
FiguraGeometrica **pFiguri;
int nrFiguri;
public:
Plansa(int n, FiguraGeometrica *f[]);
Plansa(const Plansa &plansa);
~Plansa();
void print();
};
Plansa::Plansa(int n, FiguraGeometrica *f[]){
nrFiguri=n;
pFiguri = new FiguraGeometrica*[nrFiguri];
for(int i=0;i<nrFiguri;i++){
pFiguri[i] = f[i];
}
}
Plansa::Plansa(const Plansa &plansa){
nrFiguri=plansa.nrFiguri;
pFiguri = new FiguraGeometrica*[nrFiguri];
for(int i=0;i<nrFiguri;i++){
pFiguri[i] = plansa.pFiguri[i];
}
}
Plansa::~Plansa(){
if (pFiguri != 0){
delete pFiguri;
pFiguri = 0;
}
}
void Plansa::print(){
cout<<"Plansa:"<<endl;
cout<<"======================================="<<endl;
for(int i=0;i<nrFiguri;i++){
if (pFiguri[i]!=0){
pFiguri[i]->print();
}
}
cout<<"======================================="<<endl;
}
int main(){
Cerc c(Punct(0,0),1);
c.print();
Dreptunghi d(Punct(0,1),Punct(2,0));
d.print();
FiguraGeometrica *f[]={&c,&d};
Plansa plansa(2,f);
plansa.print();
}
Cerc ((0,0),1) Dreptunghi [(0,1),(2,0)] Plansa: ======================================= Cerc ((0,0),1) Dreptunghi [(0,1),(2,0)] ======================================= Apel destructor Dreptunghi Apel destructor FiguraGeometrica Apel destructor Cerc Apel destructor FiguraGeometrica