不能将父类的对象赋值给子类对象
因为对象的赋值操作调用了一个函数 operator=()函数,该函数会将运算符右边的这个对象的成员赋给左边的对象
#include<stdlib.h>
class Father
{
public :
Father(){x=0;}
private:
int x;
};
class son:public Father
{
};
int main()
{
Father a;
son b;
a=b;
//b=a;父对象给子对象赋值,因为子对象的成员函数多于父对象,导致有些子对象成员没有赋值
Father *p=&b ;
Father&f=b;
//son&s=a;//出错
//son*p1=&a ; //出错
getchar();
return 0;
}
operator=()函数是左边对象调用的,所以赋值操作以左边对象为准
基类的指针可以指向派生类的对象,但是派生类的指针不可以指向基类的对象
son*p1=&a ;//因为派生类的对象所占的存储空间通常要比基类的对象大
派生类处理继承基类的成员之外,还拥有自己的成员,所以在用基类的指针操作派生类的对象时,由于基类指针会像
操作基类对象那样操作派生类对象,而基类对象所
占有的内存空间又通常会小于派生类对象,所以基类指针不会超出派生类对象去操作数据。