为什么不能将Base类对象分配给Derived类对象?

msc*_*msc 8 c++ inheritance object derived-class c++11

派生类对象可以被分配到一个基类对象在C++中.

Derived d;
Base b = d; // It's Ok
Run Code Online (Sandbox Code Playgroud)

但为什么不能将基类对象分配给派生类对象

Base b;
Derived d = b; //Not Ok. Compiler give an error
Run Code Online (Sandbox Code Playgroud)

编辑:

对不起,这个问题实际上是在面试时提出来的.

Som*_*ude 9

继承是一种"is-a"关系,但它只是单向的.

如果你有例如

struct Base { /* ... */ };
struct Derived : Base { /* ... */ };
Run Code Online (Sandbox Code Playgroud)

然后Derived是一个Base,但Base就是没有一个Derived.

这就是为什么你可以用派生对象分配或初始化基类实例(但要注意对象切片),而不是相反.


Que*_*tin 8

派生对象是基础对象,具有附加信息.

您可以从派生对象的基础部分初始化完整的基础对象,没问题.

但是如果你想只从一个基础对象构造一个派生对象,那么附加信息应该用什么来初始化呢?

如果要为其他信息提供默认值,可以通过声明Derived(Base const &)构造函数来实现.但由于它在一般情况下不起作用,因此不适合您.