在初步探索了C++继承的语言特性之后,总结下其赋值兼容规则:
1.子类对象可以赋值给父类对象(切割/切片)
在公有继承的前提下,子类是可以赋值给父类对象的,为什么是共有继承(public),因为公有继承会产生“is-a”的关系,这种关系会导致子类中有结构的嵌套这父类的信息,。所以子类可以给父类赋值,期间会发生类似降级的事情,使得赋值成功。若为私有继承,则会产生“has-a”的关系,这种关系是从属关系,基类中的数据仅仅是包含在派生类中,若赋值,则不会产生类似于降级的事情发生,编译器会报错。代码如下:
#include<iostream>
using namespace std;
class A
{
public:
A()
:_num(0)
{ }
private:
int _num;
};
class B:private A
{
public:
B()
:A()
{ }
private:
};
int main()
{
B b;
A a;
a = b;//错误,has-a关系无法赋值
return 0;
}
#include<iostream>
using namespace std;
class A
{
public:
A()
:_num(0)
{ }
private:
int _num;
};
class B:public A
{
public:
B()
:A()
{ }
private:
};
int main()
{
B b;
A a;
a = b;//正确,is - a关系可以赋值
return 0;
}</