c++ - 纯虚函数实现的默认行为

标签 c++ pure-virtual

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

相关文章:

c++ - std::bind 分配给 std::function

c++ - 查找数组中最大数的有效方法

c++ - 如何检测 boost::function 是否是纯虚拟的?

C++:在非虚函数中使用纯虚函数

C++ 为一个字符设置值**

c++ - 在没有源代码的情况下使用 gdb 进行调试

javascript - 在 C++ 中调试使用 IWebBrowser2 呈现的 javascript/html

c++ - 纯虚函数可能没有内联定义。为什么?

c++ - 在派生类中创建具有相同名称但不同返回类型的新函数