1、基类与派生类对象的关系
在继承方式下,派生类获得了基类成员的一份拷贝,这份拷贝构成了派生类对象内部的一个基类子对象。也就是说,在派生类对象中存在一个基类子对象。因为这个原因,基类对象与派生类对象之间存在赋值相容性。
赋值相容是指在公有派生方式下,凡是需要基类对象的地方都可以使用派生类对象基类对象能够解决的问题,用派生类对象也能够解决,有以下几种情况:
1、把派生类对象赋值给基类对象
2、把派生类对象的地址赋值给基类指针
3、用派生类对象初始化基类对象的引用
反之,则不行。
原因是,任何一个派生类对象的内部都包含有一个基类子对象,在进行上述三类赋值时,C++采用截取的方法从派生类对象中取出其基类子对象并将之赋值给基类对象。反之,基类对象中则不包含派生类子对象。
在进行上面三种赋值之后,就可以通过基类对象访问派生类对象,但只能访问派生类从基类继承而来的成员,不能访问派生类自定义的新成员。
2、继承与组合
继承:代码重用。“Is-a”
组合:一个类可以包容另外的类,即用其它类来定义它的对象成员。“Has-a”