基类和派生类之间可以相互赋值吗?
先建造一个基类和一个派生类
class A
{
public:
int a;
};
class B : public A
{
public:
int b;
void display()
{
cout << a << endl;
}
};
(1)派生类对象可以向基类对象赋值
比如可以这样
A a1;
B b1;
a1 = b1;
但是反过来就不可以了
只能用子对象对基类对象赋值,而不能用基类对象对其子对象赋值
因为显而易见,基类对象不包含派生类的成员,怎么赋值?
同理,同一基类的不同派生类对象之间也不能赋值
(2)派生类对象可以替代基类对象的引用进行赋值或初始化
这和上面的一样,就是把基类替换为基类的引用
A a1;
B b1;
A &r = a1; //定义基类A对象的引用,并用a1对其初始化
r = b1;
(3)派生类对象地址可以赋给指向基类对象的指针变量,也就是说,指向基类对象的指针变量可以用来指向派生类对象
A a1;
B b1;
A *pt = &a1; //定义一个指向A类对象的指针并指向a1
pt->display(); //调用a1.display()函数
pt = &b1; //指针指向b1
pt->display(); //调用b1.display()函数
第一个display函数成功调用了A类定义的内容
第二个display函数也成功调用了B类定义的内容
这里说明通过指向基类对象的指针,只能访问派生类中的基类成员,而不能访问派生类增加的成员