我的基本理解是,没有纯虚函数的实现,然而,我被告知可能有纯虚函数的实现。
class A {
public:
virtual void f() = 0;
};
void A::f() {
cout<<"Test"<<endl;
}
上面的代码可以吗?
让它成为一个带有实现的纯虚函数的目的是什么?
发布于 2010-01-19 05:00:13
纯virtual
函数必须在将被直接实例化的派生类型中实现,但是基类型仍然可以定义实现。派生类可以通过使用完全限定作用域的名称(在示例中调用A::f()
-如果A::f()
是public
或protected
)显式地调用基类实现(如果访问权限允许)。类似于:
class B : public A {
virtual void f() {
// class B doesn't have anything special to do for f()
// so we'll call A's
// note that A's declaration of f() would have to be public
// or protected to avoid a compile time problem
A::f();
}
};
我能想到的用例是,有一个或多或少合理的默认行为,但类设计者只希望这种默认行为被显式调用。也可能是这样,您希望派生类始终执行自己的工作,但也能够调用一组公共功能。
请注意,尽管该语言允许这样做,但我认为它并不常用(而且它可以做到这一点似乎让大多数C++程序员感到惊讶,即使是有经验的程序员也是如此)。
发布于 2010-01-19 04:49:32
它的优点是,它强制派生类型仍然覆盖该方法,但还提供了默认或附加实现。
发布于 2010-01-19 05:24:23
你必须给一个纯虚拟析构函数一个实体,例如:)
阅读:http://cplusplus.co.il/2009/08/22/pure-virtual-destructor/
https://stackoverflow.com/questions/2089083
复制相似问题