不允许将结构实例分配给 class 实例
Assigning a structure instance to a class instance not allowed
我有这份遗产:
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!
我能知道为什么吗?有什么简单的方法可以解决这种情况?
谢谢!
a = c;
因此,编译器将从 c
复制基础部分。但是它会为派生的特定部分设置什么 class。当编译器感到困惑时,它只会呕吐。
来自里氏代换原则:
Sub-classes 应该至少和基础 class 一样多。
解释:
发生继承时,派生类知道所有函数和变量(是的,有些是 public,有些是私有的,有些是受保护的,但它们是已知的)。
而基础 class 不知道派生 class。
例如,青蛙是一种动物,但动物不一定是青蛙。
简而言之,属性 会抛出编译错误
参考:
“派生类型必须完全可替代它们的基类型。” - http://www.oodesign.com/liskov-s-substitution-principle.html
这表示 c=a 有效。
我有这份遗产:
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!
我能知道为什么吗?有什么简单的方法可以解决这种情况?
谢谢!
a = c;
因此,编译器将从 c
复制基础部分。但是它会为派生的特定部分设置什么 class。当编译器感到困惑时,它只会呕吐。
来自里氏代换原则:
Sub-classes 应该至少和基础 class 一样多。
解释:
发生继承时,派生类知道所有函数和变量(是的,有些是 public,有些是私有的,有些是受保护的,但它们是已知的)。
而基础 class 不知道派生 class。
例如,青蛙是一种动物,但动物不一定是青蛙。
简而言之,属性 会抛出编译错误
参考:
“派生类型必须完全可替代它们的基类型。” - http://www.oodesign.com/liskov-s-substitution-principle.html
这表示 c=a 有效。