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