不允许将结构实例分配给类实例

时间:2015-01-06 15:37:01

标签: c++ class struct

我有这个继承:

class SomeClass : public s_SomeStruct {}; // where s_SomeStruct is a classic C struct.

这些声明:

SomeClass a;
SomeClass b;
s_SomeStruct c;

我不知道为什么情况(2)不起作用:

a = b; // (1) works fine
a = c; // (2) DOESN't WORK! 
c = a; // (3) Oh? It works!

我能知道为什么吗?以及解决这种情况的任何简单方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

a = c;

因此,编译器会从c复制基础部分。但它会为派生类特定的部分设置什么。当编译器感到困惑时,它就会呕吐。

答案 1 :(得分:1)

来自Liskov的替代原则:

子类应至少与基类一样多。

说明:

当继承发生时,派生clas知道所有函数和变量(是的,有些是公共的,有些是私有的,有些是受保护的,但它们是已知的)。

虽然基类不知道派生类。

例如,青蛙是一种动物,但动物需要一只青蛙。

简而言之,此属性使其抛出编译错误

参考:

"派生类型必须完全可替代其基本类型。" - http://www.oodesign.com/liskov-s-substitution-principle.html

这表示 c = a 有效。