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

Assigning a structure instance to a class instance not allowed

本文关键字:实例 分配 不允许 结构      更新时间:2023-10-16

我有这个继承:

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!

我能知道为什么吗?有什么简单的方法可以治愈这种情况吗?

谢谢!

根据利斯科夫替代原理:

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

解释:

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

而基类不知道派生类。

例如,青蛙是一种动物,但动物不一定是青蛙。

简而言之,此属性使其引发编译错误

参考:

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

这说明 C=A 是有效的。

a = c;

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