《深度探索C++对象模型》
父类:
<pre name="code" class="cpp">class ZooAnimal
{
public:
ZooAnimal();
virtual ~ZooAnimal();
virtual void rotate();
protected:
int loc;
string name;
};
子类:
class Bear :public ZooAnimal
{
public:
Bear();
~Bear();
void rotate();
virtual void dance();
protected:
enum Dances{};
Dances dances_known;
int cell_block;
};
Bear b;
ZooAnimal za = b;
此时发生裁剪,保留ZooAnimal部分;
OO paradigm:
Bear b;
ZooAnimal *pz = &b;
Bear *pb = &b;
pz所涵盖的地址只包含Bear Object中的ZooAnimal subobject。
不能使用pz处理Bear中的成员。
但通过virtual机制,可以调用Bear::rotate();