9

如果一个类总是要被继承,那么构造构造函数是否有意义protected

class Base
{
protected:
    Base();
};

class Child : protected Base
{
public:
    Child() : Base();
};

谢谢。

4

2 回答 2

11

仅当您不希望客户创建 的实例时才有意义Base,而是希望它成为某些 [派生] 类的基类,和/或打算由其朋友使用Base(参见下面的示例)。记住protected函数(和构造函数)只能从派生类和friend类中调用。

class Sample;
class Base
{
    friend class Sample;
protected:
    Base() {}
};

class Sample
{
 public:
   Sample()
   {
      //invoking protected constructor
      Base *p = new Base();
   }
};
于 2010-12-24T05:09:51.430 回答
4

如果它总是作为基础(“mixin”),是的。请记住,具有纯虚函数的类始终是基础,但您不需要这样做,因为它无论如何都无法实例化。

另外,给它一个公共的虚拟析构函数或一个受保护的非虚拟析构函数

于 2010-12-24T05:13:11.553 回答