我读过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/

10-10 08:08