我的基本理解是没有纯虚函数的实现,但是,有人告诉我可能有纯虚函数的实现。
class A {
public:
virtual void f() = 0;
};
void A::f() {
cout<<"Test"<<endl;
}
上面的代码可以吗?
让它成为一个带有实现的纯虚函数的目的是什么?
最佳答案
纯 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++ 程序员,甚至是有经验的程序员都感到惊讶)。
关于c++ - 带有实现的纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089083/