2008-12-07 108 views
6

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

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

回答

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(); 
} 
+0

也许我的大脑太小了,但是在派生类中更改pure_virtual的签名使我感到困惑。它说明了什么? – 2008-12-08 00:27:40

+0

onebyone好抓oO我没有发现它。我怀疑这是一个错字? – 2008-12-08 00:33:27

9

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