使用protected或public with virtual function?

时间:2016-05-28 20:18:03

标签: c++ public protected

我总是看到很多例子,其中虚函数在头文件中被声明为受保护。将虚拟函数声明为public是错误的吗?使用虚拟功能时的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

  

将虚拟函数声明为public是错误的吗?

没有

  

使用虚拟功能时的最佳做法是什么?

这完全取决于您的使用案例。关键字本身在使用上是正交的。

有时候protected virtual函数与template design pattern一样好,大多数情况下virtual函数被声明为public以提供接口

publicprotected继承有两种设计模式类别:

  1. 模板功能模式:

    class Base {
    public:
        void foo() {
            bar();
        };
    protected:
        virtual void bar() = 0;
    };
    
    class Implementation : public Base {
         void bar() {
             // provide the implementation
         }
    };
    
  2. 界面模式:

    struct Interface {
        virtual void foo() = 0;
        virtual ~Interface() {}
    };
    
    class Implementation : public Interface {
    public:
         void foo() {
             // provide the implementation
         }
    };
    
  3. 还有其他设计模式,可能完全忽略virtual(请参阅CTRP),但仍保留publicprotected的语义。