对于公有派生来说,可以将派生类的对象赋给基类的对象,反之是不可以的。
赋值兼容性规则可以总结为4点:
1、不允许将基类的对象赋给派生类的对象。
2、派生类的对象可以赋给基类的对象。
3、可将派生类的对象的指针赋给基类的指针变量。
4、派生类对象可以初始化基类型的引用。
在3、4两种情况下,使用基类的指针或引用时,只能访问从相应基类中继承来的成员,不允许访问
其他基类的成员或在派生类中增加的成员。
#include <iostream>
class Base {
private:
int val;
char bit1;
};
class Child:public Base {
private:
char bit2;
};
int main(void)
{
Base base1;
Base *pbase;
Child child;
// child = base1; //错误,不允许将基类对象赋给派生类对象。
base1 = child; //正确,派生类的对象赋给基类的对象是可以的。
pbase = &child; //正确,派生类对象的指针赋给基类对象的指针是可以的。
Base &base2 = child; //正确,派生类对象可以初始化基类类型的引用。
return 0;
}
为什么呢?