6

这是交易。我有一个很大的类层次结构,我有一个一直扩展的方法。该方法总是必须在每个新级别查看一个或两个以上变量,这些变量取决于层次结构中的实际类。我想要做的是检查这两个额外的变量,然后调用同一个函数的超类版本。我希望能够定义此函数,因为它的所有直接子级都将使用它,但我想强制该类的任何子级必须重新定义该方法(因为他们将不得不查看他们的新数据成员)

那我该怎么写呢?我通常使用 =0; 在 .h 文件中,但我认为我不能使用它并定义它......

4

2 回答 2

9

实际上,您可以将函数声明为纯虚拟函数,并且仍然在基类中为其定义实现。

class Abstract {
public:
   virtual void pure_virtual(int x) = 0;
};

void Abstract::pure_virtual(int x) {
   // do something
}


class Child : public Abstract {
    virtual void pure_virtual(int x);
};

void Child::pure_virtual(int x) {
    // do something with x
    Abstract::pure_virtual();
}
于 2008-12-07T23:52:11.110 回答
9

您可以为纯虚函数提供定义。查看GotW #31了解更多信息。

于 2008-12-07T23:52:19.783 回答