( )
, .
#include <iostream.h>
using namespace std;
class A //
{ int aa;
public:
A() {cout<<"1 A"<<endl;}
A(int AA): aa(AA) {cout<<"2 A"<<endl;}
~A() {cout<<" A"<<endl;}
};
class B: virtual public A // ( D)
{ char bb;
public:
B() {cout<<"1 B"<<endl;}
B(int AA,char BB): A(AA), bb(BB)
{cout<<"2 B"<<endl;}
~B() {cout<<" B"<<endl;}
};
class C: virtual public A // ( D)
{ float cc;
public:
C() {cout<<"1 C"<<endl;}
C(int AA,float CC): A(AA), cc(CC)
{cout<<"2 C"<<endl;}
~C() {cout<<" C"<<endl;}
};
class D: public C,public B // (II )
{ int dd;
public:
D() {cout<<" 1 D"<<endl;}
D(int AA,char BB,float CC,int DD):
A(AA), B(AA,BB), C(AA,CC), dd(DD)
{cout<<" 2 D"<<endl;}
~D() {cout<<" D"<<endl;}
};
void main()
{ D d(1,'a',2.3,4);
D dd;
}
:
2 A ( d)
2 C
2 B
2 D
1 A ( dd)
1 C
1 B
1 D
D ( d)
B
C
A
D ( d)
B
C
A
.
d dd D , B C, , : class D: public B, public C. , :
class A{ };
class B1: virtual public A{ };
class B2: virtual public A{ };
class B3: public A{ };
class C: public B1, public B2, public B3 { };
,
1 2 ( ) 3.
37. .
-
, . . , . , , . virtual = 0;
|
|
, -
. , , , , . , .
. base , base a;
base *p= new base;
. rect b;
base *p=&b;
base &p=b;
, , -
. , , . , . . . , . , , , . .
class base
{ -
public:
virtual ~base() = 0;
-
}
base::~base()
{ }
base , -
.
. -
, , .
Proxi-.
proxi-. Proxi- , . proxi- :
- , ;
- proxi- ;
- , proxi-
// cls.h cls
class cls
{ int val;
public:
cls(int);
set(int);
int get() const;
};
// cls
#include "cls.h"
cls:: cls(int v) {val=v;}
cls:: set(int v) {val=v;}
int cls:: get() const {return val;}
// prox.h proxi- prox
class cls; // cls
class prox
{ cls *pr; //
public:
prox(int);
set(int);
int get() const;
~prox();
};
// proxi- prox
#include "prox.h"
#include "cls.h"
|
|
prox:: prox(int vv) {pr=new cls(vv);}
prox:: set(int vv){pr->set(vv);}
int prox:: get() const {return pr->get();}
prox:: ~prox(){delete pr;}
// cls proxi- prox
#include <iostream>
using namespace std;
#include "prox.h"
int main()
{ prox obj(1);
cout<< val cls = <<obj.get()<<endl;
obj.set(2);
cout<< val cls = <<obj.get()<<endl;
}
:
val cls = 1
val cls = 2
main()- prox.cpp,
cls. , private- cls .