【发布时间】:2015-01-14 18:16:23
【问题描述】:
class Base{};
class Derived: public Base{};
int main()
{
Base B;
Derived D;
Base B1 = D;//OK
Derived D1 = B;//error: conversion from ‘Base’ to non-scalar
//type ‘Derived’ requested
return 1;
}
我知道派生类与基类有 is-a 关系。
什么阻止 Derived D1 具有来自 B 的值和具有一些垃圾值的剩余成员变量(如果有)?
或者
错误信息是什么
请求从“Base”转换为非标量类型“Derived” Derived D1 = B;
说?什么是标量类型?
【问题讨论】:
-
您可以添加构造函数
Derived(const Base&)来提供转换 -
“is-a”关系只适用于一个方向。
-
好的,但我的问题是,为什么不默认。
-
答案就在问题中。垃圾值。
-
这不是一模一样的副本,之前的问题是关于复制分配的,没有人谈论初始化。
标签: c++ inheritance