Bor*_*ris 1 c++ inheritance multiple-inheritance
我一直在查看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;
}
Run Code Online (Sandbox Code Playgroud)
为什么Circle_Impl在"Circle_Impl"错误中使用"未实现的纯虚方法'绘制' 实例化失败?" 还没有draw实现在被定义Shape_Impl???
问题是你virtual在继承关键字时忘记Shape了纯虚方法draw:
class Circle : public virtual Shape { ...
class Shape_Impl : public virtual Shape { ...
Run Code Online (Sandbox Code Playgroud)
如果没有virtual关键字,您将获得重复的基本实例,从而导致错误的事情发生.通常,如果您希望通过多个继承链继承同一个类时需要多重继承,则需要virtual使其正常工作.