我读过Scott Meyers建议虚拟函数的默认行为是:
class base
{
.....
protected:
void vfDefault();
public:
virtual void vf() = 0;
};
在派生类中实现时
class d1:public base
{
virtual vf()
{
vfDefault();
....
}
};
但是也可以实现纯虚函数并将其用作默认行为:
class base
{
...
public:
virtual void vf() = 0;
}
void base::vf()
{
.....
};
在派生类中实现时
class d1:public base
{
virtual vf()
{
base::vf();
....
}
};
使用纯虚函数实现默认行为有什么不妥之处吗?
最佳答案
请注意,vfDefault()
和vf()
具有不同的访问说明符。每个人都可以调用base::vf()
,包括直接调用基本实现。但是只有base
的子级才能调用vfDefault()
。因此,如果将默认行为作为单独的 protected 函数实现,则可以确保外部代码无法直接调用它。
关于c++ - 实现纯虚拟功能的默认行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40191410/