存在继承关系的父子类之间,赋值兼容性原则:子类可以当成父类使用
意味着子类(内涵更大)可以兼容父类(内涵更小),而父类不能兼容子类,即:
-
子类对象可以直接赋值给父类对象
-
子类对象可以直接初始化父类对象
-
父类指针可以直接指向子类对象
-
父类引用可以直接引用子类对象
class Base
{
protected:
int m_base;
public:
Base()
{ }
};
class Derived : public Base
{
protected:
int m_derived;
public:
Derived()
{ }
};
int main()
{
Base b;
Derived d;
b = d; //子类对象赋值给父类对象
Base bb(d); //子类对象初始化父类对象
Base *p = &d; //父类指针指向子类对象
Base &r = d; //父类引用引用子类对象
//父类赋值给子类会发生什么?
//d = b; 编译失败
//Derived *f = &b; 编译失败
return 0;
}