{
public:
CAnimal( )
{
age = 1;
num = 0;
}
CAnimal(int ag, int nu)
{
age = ag;
num = nu;
}
int age;
int num;
};
class CDog:public CAnimal
{
public:
CDog( int age, int num, int kind ):
CAnimal(age, num)
{
this->kind = kind ;
}
int kind;
};
int main( )
{
int a = 5;
CAnimal an(8, 9);
CDog dog(1, 2, 3);
return 0;
}
CAnimal類有 age 和 num ,CDog 類也有 age 和 num ,那麼CAnimal類和CDog類的這兩個數據成員之間是什麼關係呢?它們的內存地址一樣嗎?還是各有各地內存單元,互不影響?
就讓我們來看看,它們在內存單元上的真實面貌:
VC6.0下的一種情況:
0x0012FF64:
0x0012FF68: 01 00 00 00-----------------------對象 age 的起始地址,dog.age 的地址
0x0012FF6C: 02 00 00 00-----------------------dog.num 的地址
0x0012FF70: 03 00 00 00-----------------------dog.kind 的地址
0x0012FF74: 09 00 00 00-----------------------對象 an 的起始地址, an.age的地址
0x0012FF78: 08 00 00 00-----------------------an.num 的地址
0x0012FF7C:05 00 00 00------------------------變量 a 的地址
從上面的內存結構來看,CAnimal類和CDog類的兩個數據成員:age 和 num 在內存結構上是擁有獨立的地址單元的,互不影響!!
如果CAnimal類中有保護成員和私有成員變量,這種類型的變量也會被繼承到派生類中嗎?也就是說派生類對象的內存模型中會有從基類繼承來的保護成員和私有成員嗎?
實際上基類的所有成員(不管是不是私有的)都會被繼承到派生類中,只是這種情況下,派生類是無法訪問到這些私有變量的!!
CAnimal類的對象模型:
an-------------> age
num
CDog類的對象模型:
dog-------------> age
num
kind