gpt4 book ai didi

C++ 基于上下文的类实现

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:17 26 4
gpt4 key购买 nike

在 C++ 中是否可能有一个 class 其定义取决于其构造的上下文?

例如,具有多个构造函数的 class A 是否可以在调用特定构造函数后从 class B 继承,同时继承自 class C 在调用不同的构造函数之后?

如果不是,为什么?如果是这样,这将如何实现?

最佳答案

不,这在动态上是不可能的。

如果 A 继承自 B ,则它应该是某种 B(“is-a”关系)。这种关系代表 A 类的所有对象,与上下文无关。

您有时想从 B 继承,有时从 C 继承这一事实表明您正在考虑“拥有”关系。这将通过组合实现:

class B; 
class C;
class A {
B *hasB; // of course in real lif you'd use unique_ptr or shared_ptr...
C *hasC;
public:
A(B *b); // would set hasB but set hasC to nullptr.
A(C *c); // would set hasC but set hasB to nullptr.
...
};

如果你的问题不必动态处理,而只是在编译时,你可以想到模板:

template <class T>
class A : public T {
...
};

A<B> ab; // A<B> inherits from B
A<C> ac; // A<C> inherits from C
// but attention: both class are two different classes.

关于C++ 基于上下文的类实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34365043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com