- #include <iostream.h>
- class ClassA
- {
- public:
- virtual ~ ClassA(){};
- virtual void FunctionA(){};
- };
- class ClassB
- {
- public:
- virtual void FunctionB(){};
- };
- class ClassC : public ClassA,public ClassB
- {public:
- };
- void main(){
- ClassC aObject;
- ClassA* pA=&aObject;
- ClassB* pB=&aObject;
- ClassC* pC=&aObject;
- cout<<pA<<endl;
- cout<<pB<<endl;
- cout<<pC<<endl;
- }
假设aObject的地址是 xxx.
那么:
pA=xxx
pB=xxx + 4(如果ClassA里面多一个 int a;那么这个地址将会变成xxx+8)
pC=xxx
ClassA里面定义了虚函数,所以会有一个虚函数表指针(4 byte)。ClassA的总大小为4 byte. 同理,ClassB的总大小为4 byte.
ClassC从ClassA, ClassB继承来的,在内存中ClassA, ClassB顺序排列。ClassC的总大小为8 byte.
“ClassB* pB=&aObject;”这个隐式转换会得到ClassB类的地址。
class CA{
public:
//virtual ~CA(){};
//virtual void f(){cout<<"CA::f"<<endl;}
int m1;
};
class CB{
public:
int m2;
//virtual void f(){cout<<"CA::f"<<endl;}
};
class CC: public CA,public CB{
public:
int m3;
};
int main(){
CC* pC=new CC;
CB* pB=dynamic_cast<CB*>(pC);
CA* pA=dynamic_cast<CA*>(pC);
if(pC==pB)
cout<<"equal"<<endl;
else
cout<<"not equal"<<endl;
if(pC==pA)
cout<<"equal"<<endl;
else
cout<<"not equal"<<endl;
if(int(pC)==int(pB))
cout<<"equal"<<endl;
else
cout<<"not equal"<<endl;
if(int(pC)==int(pA))
cout<<"equal"<<endl;
else
cout<<"not equal"<<endl;
system("pause");
return 1;
}
输出是:equal equal not equal equal