在C ++中是否可以有一个定义的纯虚函数?

时间:2008-12-07 23:32:50

标签: c++ function inheritance pure-virtual

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

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:9)

您可以为纯虚函数提供定义。查看GotW #31了解详情。