除了可以从派生类重写方法调用它之外,纯虚函数似乎无法在任何地方调用!那么,它的使用是什么?例如
class base
{
public:
virtual void fun()=0
{
cout<<"I have been called from derived class"<<endl;
}
};
class derived:public base
{
public:
void fun()
{
cout<<"I am the derived class"<<endl;
base::fun();
}
};
void main()
{
derived d;
d.fun();
}
答案 0 :(得分:5)
它以您在问题中提到的确切方式使用,有一些通用逻辑可以被派生类重用,但同时您希望强制派生类提供非共同部分的实现。
答案 1 :(得分:2)
它强制派生类实现它,同时仍然为派生实现提供一个不需要从派生类以外的任何地方调用的常见行为。
答案 2 :(得分:1)
纯virtual
方法的作用是完全abstract
方法,类似于其他语言,例如Java和C#。仅使用纯class
方法填充的C ++ virtual
代表其他语言的interface
。
给他们一个身体是对这种理想的滥用,并且它违背了目的。如果基础class
想要仅为其子项提供功能,那么它应该通过protected
非纯virtual
方法执行此操作(如果它仍然可以是virtual
有道理)。
答案 3 :(得分:0)
此问题可能与C++ pure virtual function have body重复 我已经看到这主要用于纯虚拟析构函数(需要实现)。 可以在此处找到解释纯虚拟析构函数之外的案例的另一个好答案:(Im)pure Virtual Functions