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)
编辑:
对不起,这个问题实际上是在面试时提出来的.
继承是一种"is-a"关系,但它只是单向的.
如果你有例如
struct Base { /* ... */ };
struct Derived : Base { /* ... */ };
Run Code Online (Sandbox Code Playgroud)
然后Derived是一个Base,但Base就是没有一个Derived.
这就是为什么你可以用派生对象分配或初始化基类实例(但要注意对象切片),而不是相反.
派生对象是基础对象,具有附加信息.
您可以从派生对象的基础部分初始化完整的基础对象,没问题.
但是如果你想只从一个基础对象构造一个派生对象,那么附加信息应该用什么来初始化呢?
如果要为其他信息提供默认值,可以通过声明Derived(Base const &)构造函数来实现.但由于它在一般情况下不起作用,因此不适合您.
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |