c++ - 在 C++ 中实现串联继承

标签 c++ inheritance mixins prototypal-inheritance

是否有可能在 C++ 中实现连接继承或至少混合?

感觉用C++做是不可能的,但我无法证明。

谢谢。

最佳答案

根据 this article :

Concatenative inheritance is the process of combining the properties of one or more source objects into a new destination object.

我们是在谈论类继承吗?

这是公共(public)继承在 C++ 中工作的基本方式。由于多重继承,您甚至可以组合多个基类。

但是可能会有一些限制(例如,必须解决不同来源之间的名称冲突,这取决于您可能需要虚函数的用例,并且可能需要显式创建组合构造函数)。

或者从实例化对象继承意味着什么?

如果它真的是关于对象而不是类,那么情况就不同了。您不能将随机类型的对象相互克隆和组合,因为 C++ 是一种强类型语言。

但首先,让我们纠正误导性的措辞。这与串联继承无关,因为继承是针对类的。它更像是“串联原型(prototype)”,因为您通过接管现有对象的值和行为来创建新对象。

要在 C++ 中实现某种“串联原型(prototype)”,您需要根据组合原则使用一组定义明确的“可串联”(即可组合)基类来设计它。这可以通过使用 prototype design pattern 来实现连同 entity-component-system建筑学。

目的是什么

您目前正在寻找这种构造,可能是因为您在动态类型语言中大量使用它。

所以请记住 popular quote (马克吐温?马斯洛?):

If you have a hammer in your hand, every problem looks like nails

所以问题是你真正在寻找什么以及你打算解决什么问题。恕我直言,不能排除其他习语可能更适合 C++ 世界来实现相同的目标。

关于c++ - 在 C++ 中实现串联继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54226119/

相关文章:

c++ - 编辑文本文件

c++ - 访问 std::pair 数组的元素时出错

c++ - 使用数组

django - South 处理模型 mixin 吗?

ruby 与类方法、实例方法和类变量混合

c++ - #define 数组索引不起作用

c++ - C++ 中部分类函数覆盖的问题

java - 使用继承和 Java 接口(interface)使用为 Java 创建 XML 模式

c++ - 为什么我不能 static_cast 继承树下的模板化对象?

ruby - 为什么模块的单例方法在混合的下游特征类中不可见?