友元关系不能继承。
如果基类定义了静态成员,则整个继承层次中只有一个这样的成员。无论从基类派生出多少个派生类,每个静态成员只有一个实例。
静态成员遵循常规访问控制:如果静态成员在基类中为私有的,则派生类不能访问它。如果该静态成员在基类是共有的,则基类可以访问它,派生类也可以访问它。
赋值兼容规则
赋值兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。
通过公有继承,派生类得到了基类中除构造函数,析构函数之外的所有成员。这样,共有派生类实际上就具有了基类的所有功能,凡是基类能解决的问题,共有派生类都可以解决。
①派生类的对象可以赋值给基类对象
②派生类的对象可以初始化基类的引用
③派生类的对象的地址可以复制给指向基类的指针
class Base{}; //基类class Derive:public Base{}; //共有派生类Base b, *pb; //定义基类对象Derive d; //定义派生类对象
这时,支持下面三种操作:
b = d; //派生类对象赋值给基类,复制基类继承部分Base &rb = d; //基类引用到派生类对象pb = &d; //基类指针指向派生类对象
赋值兼容规则是C++多态性的重要基础之一。
二义性问题
使用成员名限定可以消除二义性,基本形式为:
对象名.基类名::成员名
对象指针名->基类名::成员名
虚基类