C++继承,是否可以只有共享祖父类的 1 个副本
C++ inheritance, is it possible to have only 1 copy of a shared grandparent class
我有一个项目,其中包含一些非常小的类,这些类充当较大类的最小接口。 有时我有一些对象需要其中几个接口。 有时这些接口共享相同的派生基类。 无论如何,我可以构建我的代码,以便我只有所有接口共享的派生基类的一个副本?
下面是一个代码示例:
class A {
public:
virtual void f(int a)=0;
virtual int g() const {
return m_inner;
}
protected:
int m_inner;
};
class B : public A {
public:
virtual void f(int a)=0;
virtual void h(int b) {
m_stuff = b;
m_inner = 0;
}
protected:
int m_stuff;
};
class C : public A {
public:
virtual void f(int a)=0;
virtual int i() const {
return m_otherstuff;
}
protected:
int m_otherstuff;
};
class D : public B, public C {
public:
void f(int a) { //do stuff }
//fill in the rest of a big actual class.
};
D 有两个 A 副本,引用 A:: 是不明确的。 构建我的课程以使我在一天结束时只获得一份 A 副本的最佳方法是什么? 我愿意以任何方式重组A,B和C。 这可能吗?
虚拟继承是你需要的。您的案例是典型的钻石问题。在谷歌或任何C ++书籍上进行简短搜索应该会给你很多相关信息
我不太喜欢C++但我知道这被称为钻石问题。
而且,这是您的解决方案。
虚拟继承将解决您的直接问题(已经在这里回答了)。但是,我强烈建议您重新考虑层次结构。我从未见过虚拟继承的使用,除非在学术论文和一些极端重构的情况下。也许,您可以通过使用聚合而不是继承来摆脱困境。
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 在运行时选择父类的实现
- 如何在C++子类中访问父类的私有变量
- 将父类的子类的数据复制到具有相同父类的另一个类
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- C++ 将子类的对象添加到父类的向量中
- 两个父类的构造函数的序列
- 为什么我的子类不继承父类的字符串?
- C++调用使用重写函数的父类函数
- 在父类中公开受保护的构造函数
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 如何使父类不重复已经执行的祖父方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- Arduino在子类中使用父类方法
- 使用 Clang LibTooling 扫描C++在模板化父类中调用本地类的源
- 从父类的向量访问子类函数,而无需向下转换
- 将派生类的构造函数声明为父类的友元