这是交易。我有一个很大的类层次结构,并且有一个方法可以一直延伸。该方法始终需要在每个新级别查看一个或两个以上的变量,并且这些变量取决于层次结构中的实际类。我想要做的是检查这两个额外的变量,然后调用超类的同一个函数的版本。我希望能够定义这个函数,因为它的所有直接的孩子都会使用它,但是我想要强制该类的任何孩子必须重新定义该方法(因为他们将不得不查看他们的新数据成员)在C++中是否可以定义纯虚函数?
那么我怎么写这个?我通常使用= 0;在.h文件中,但我认为我不能使用它并将其定义...
这是交易。我有一个很大的类层次结构,并且有一个方法可以一直延伸。该方法始终需要在每个新级别查看一个或两个以上的变量,并且这些变量取决于层次结构中的实际类。我想要做的是检查这两个额外的变量,然后调用超类的同一个函数的版本。我希望能够定义这个函数,因为它的所有直接的孩子都会使用它,但是我想要强制该类的任何孩子必须重新定义该方法(因为他们将不得不查看他们的新数据成员)在C++中是否可以定义纯虚函数?
那么我怎么写这个?我通常使用= 0;在.h文件中,但我认为我不能使用它并将其定义...
实际上,您可以将函数声明为纯虚拟的,并仍然在基类中为其定义实现。
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();
}
您可以为纯虚函数提供定义。检查GotW #31了解更多信息。
也许我的大脑太小了,但是在派生类中更改pure_virtual的签名使我感到困惑。它说明了什么? – 2008-12-08 00:27:40
onebyone好抓oO我没有发现它。我怀疑这是一个错字? – 2008-12-08 00:33:27