class A{
A& operator =(const A&){}
};
class B:A{
B& operator=(const &B){}
};
void main()
{
A a;
B b;
a=b;//正确
b=a;//错误
}
可以把派生类赋值给基类。我们知道赋值,是调用了类的赋值运算符。所以当派生类给基类赋值时,调用了基类的复制运算符函数,该函数的参数是基类对象的const 引用,那么
a=b,实际就是用基类引用派生类,然后将派生类中基类部分赋值给对应的基类成员。
而b=a报错是因为派生类不能引用基类。
NOTE:基类可以引用或指针绑定到派生类。因为派生类在构造的时候,会先构造基类部分,所以派生类对象中包含基类对象,那么基类就可以通过引用或指针动态的绑定到派生类对象中的基类部分,反之则不行,因为基类中可能没有派生类自定义的成员。