在基类中定义公共虚函数的好处是我们不必在派生类中重新定义它们.
即使我们在基类本身中定义纯虚函数,我们仍然必须在派生类中定义它们.
#include <iostream>
using namespace std;
class speciesFamily
{
public:
virtual void numberOfLegs () = 0;
};
void speciesFamily :: numberOfLegs ()
{
cout << "\nFour";
}
class catFamily : public speciesFamily
{
public:
void numberOfLegs ()
{
speciesFamily :: numberOfLegs ();
}
};
Run Code Online (Sandbox Code Playgroud)
这可能看起来很奇怪,但是在基类本身定义纯虚函数是否有益的情况下是否存在?
Ker*_* SB 14
两件事情:
首先,有一个常见的边界线场景:假设你想要一个抽象基类,但你没有虚拟函数可以放入它.这意味着你没有制作纯虚拟的功能.现在有一种方法:因为你总是需要一个虚拟析构函数,你可以使它纯粹.但是你也需要一个实现,所以这是你的嗜好:
struct EmptyAbstract
{
virtual ~EmptyAbstract() = 0; // force class to be abstract
};
EmptyAbstract::~EmptyAbstract() { } // but still make d'tor callable
Run Code Online (Sandbox Code Playgroud)
这可以帮助您最小化抽象类的实现大小.它在某种程度上是微观的,但如果它在语义上适合,那么拥有这个选项是件好事.
第二点是你总是可以从派生类中调用基类函数,所以你可能只想拥有一个"通用"特性集,尽管不需要任何抽象实例.再次,来自纯虚拟定义函数:
struct Base
{
virtual void foo() = 0;
};
struct Derived : Base
{
virtual void foo()
{
Base::foo(); // call common features
// do other stuff
}
};
void Base::foo() { /* common features here */ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5740 次 |
| 最近记录: |