子类中的纯虚拟声明

时间:2011-07-14 03:18:44

标签: c++ abstract-class pure-virtual virtual-method

我有几个像这样的c ++接口:

struct IThese {
virtual void doThesethings() = 0;
}

struct IThose : public IThese {
virtual void doThoseOtherThings() = 0;
}

请注意,IThose实现了自己的方法,但也实现了来自其他接口的方法,因此我们的想法是IThose的实现者需要实现

问题:我需要在doThesethings重新声明IThose吗?

如果没有,如果我做了会怎么样?它会影响IThese方法吗?

2 个答案:

答案 0 :(得分:1)

目前class IThose是抽象类**,您不必在其中重新声明doTheseThings()。您可以选择doTheseThings()内实施class IThose

如果在doThesethings()中实施了class IThose,那么它的子类(派生IThose可能会也可能不会实现它。但他们必须实施 doThoseOtherThings(),如果他们不想抽象的话。

**抽象类:在其中或通过其基类

至少包含一个纯virtual方法

答案 1 :(得分:1)

需要在doThesethings()重新声明IThose

继承自IThese 的类(或结构)必须实现doThesethings()

来自IThose 的类(或结构)必须同时实现doThesethings()和'doThoseOtherThings()`。

要回答您的其他问题,如果您要在doThesethings()中重新声明IThose,则不同的编制器可能会有不同的反应。要么它没有任何效果,因为编译器会认为它是冗余的,否则它将是一个错误,因为纯虚方法被声明两次并且在两种情况下都是纯虚拟的。