【发布时间】:2021-11-05 16:12:59
【问题描述】:
所以我发现自己的类层次结构有点混乱。
我的代码看起来有点像,过于简单化了:
#include <iostream>
struct Parent {
virtual void pureVirtual() = 0;
};
struct Child : public Parent {
void pureVirtual() override {
std::cout << "Child::pureVirtual()" << std::endl;
}
};
struct Brother: public Parent {
};
struct GrandChild : public Child, public Brother {
};
GrandChild test;
编译失败:
抽象类类型“GrandChild”的对象是不允许的:--纯虚函数 "Parent::pureVirtual" 没有覆盖C/C++(322)
我不完全明白为什么GrandChild 没有从Child 继承pureVirtual 的实现。
在实践中,我有大量纯虚拟函数要“重新实现”,也就是说,只需编写如下代码行:
struct GrandChild : public Child, public Brother {
void pureVirtual() override {
Child::pureVirtual();
}
};
我原以为编译器会自动使用来自Child 的实现。
有什么技巧可以告诉编译器我将重用来自Child 的所有实现吗?
无论如何,我可能不得不想出一个更好的设计,但如果有简单的解决方案,这让我很感兴趣。
【问题讨论】:
-
子和兄弟有独立的父实例。您可能的意思是根据您的期望为
Parent使用virtual基类。
标签: c++ inheritance virtual-functions