我一直在查看 C++ 核心指南项目 C.129并复制粘贴了一个多重继承示例,但无法弄清楚为什么 MS 编译器和 CLang 都向我显示相同的错误...它必须非常简单!
代码:
class Shape { // pure interface
public:
virtual void draw() = 0;
};
class Circle : public Shape { // pure interface
public:
virtual int radius() = 0;
};
class Shape_Impl : public Shape {
public:
void draw() override {}
};
class Circle_Impl : public Shape_Impl, public Circle {
public:
int radius() override { return 42; }
};
int main()
{
Circle_Impl* ic = new Circle_Impl();
return 0;
}
为什么 Circle_Impl
的实例化失败并出现“未实现的纯虚拟方法‘draw’ in 'Circle_Impl'”错误? Shape_Impl
中不是定义了draw
实现吗???
最佳答案
问题是你在继承 Shape
时忘记了 virtual
关键字,它声明了纯虚方法 draw
:
class Circle : public virtual Shape { ...
class Shape_Impl : public virtual Shape { ...
如果没有 virtual
关键字,您会得到重复的基础实例,这会导致错误的事情发生。一般来说,如果您想要多重继承,而您可能会通过多个继承链继承同一个类,则需要 virtual
才能使其正常工作。
关于c++ - 被简单的 C++ 多重继承示例难住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407658/