1.多重继承下的对象布局
#include <iostream>
using namespace std;
class A{
    
public:
        
virtual void fnA(){cout<<"A."<<endl;}
}
;

class B{
    
public:
        
virtual void fnB(){cout<<"B."<<endl;}
}
;

class C:public A,public B{
    
public:
        
void fnA(){cout<<"fnA->C."<<endl;A::fnA();}
        
void fnB(){cout<<"fnB->C."<<endl;B::fnB();}
}
;

int main(){
    C 
*pC=new C();
    cout
<<pC<<endl;
    pC
->fnA();
    pC
->fnB();
    B 
*pB=pC;
    cout
<<pB<<endl;
    pB
->fnB();
    A 
*pA=pC;
    pA
->fnA();
    cout
<<pA<<endl;

    delete pC;

    
return 0;
}


2.基类的析构函数
#include <iostream>
using namespace std;

class A{
    
public:
        A()
{cout<<"A()."<<endl;}
        
~A(){cout<<"~A()."<<endl;}
}
;

class B:public A{
    
public:
        B()
{cout<<"B()."<<endl;}
        
~B(){cout<<"~B()."<<endl;}
}
;

int main(){
    A 
*p=new B(); //基类没有将析构函数声明为虚拟,则最后并不会调用子类的析构函数
    delete p;
    
return 0;
}


暂时只实现了这个简单的Demo,等拿到《深度探索C++对象模型》再仔细弄下 ..~

一个很简单的码 ..~ 这个码是在VC6.0中运行的 所以不符合现在的标准
#include <iostream.h>

class Point
{
public:
    
virtual void output()
    
{
        cout
<<"调用了基类的output()函数.";
    }

    
    
void cjp()
    

        
this->output();

    }

}
;

class test:public Point
{
public:
    
void output ()
    
{
        cout
<<"调用了派生类的output函数。";
    }

}
;

int main()
{
    test tt;
    tt.cjp();
    
return 0;
}
//endof main() 

如果这里基类的output不是virtual function 运行时这个this 对象就是基类的指针
... 加了就是运行派生类的output