我的基本理解是,没有针对纯虚函数的实现,但是,有人告诉我可能存在针对纯虚函数的实现。
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/61956184/