不允许将结构实例分配给类实例
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!
我能知道为什么吗?有什么简单的方法可以治愈这种情况吗?
谢谢!
根据利斯科夫替代原理:
子类至少应该与基类一样多。
解释:
当继承发生时,所有函数和变量对于派生的 clas 都是已知的(是的,有些是公共的,有些是私有的,有些是受保护的,但它们是已知的)。
而基类不知道派生类。
例如,青蛙是一种动物,但动物不一定是青蛙。
简而言之,此属性使其引发编译错误
参考:
"派生类型必须完全可替代其基类型 http://www.oodesign.com/liskov-s-substitution-principle.html。"
这说明 C=A 是有效的。
a = c;
因此,编译器将从c
复制基本部分。但是它会为特定于派生类的部分设置什么。当编译器感到困惑时,它只会呕吐。
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 堆栈分配的类类型.为什么两个 ID 实例的地址相同?
- 我想知道我是否可以将一个类分配给特定的成员数据并创建该类的实例
- 是否应该使用继承来减少内存消耗的实例的内存分配?
- 使用 pybind11 包装C++分配的实例
- 如何在C++中动态分配全局字符数组中的类实例?
- 如何在C++中将类的实例完全重新分配给同一类的另一个实例(然后删除原始对象)?
- 如何将不同的成员函数指针分配给注册类的不同实例?
- 将来自类的特定实例的函数分配给变量以保持状态
- 当指针指向的对象被另一个类的实例删除时,重新分配指针
- 将成员函数分配给实例成员的属性
- 如何将内存分配给具有数组成员的类的实例
- (C++)用于实例化新对象并将其分配给指向相同对象类型的指针的 2D 向量的语法
- 删除C++中动态分配的类实例
- 不允许将结构实例分配给类实例
- 使用单一实例分配静态成员
- 如何为c++类的多个实例分配随机优先级
- 将未初始化的类实例分配给类指针会导致分段错误
- 为类的每个实例分配唯一 ID