C ++:受保护的类构造函数

时间:2010-12-24 05:05:09

标签: c++ inheritance polymorphism base-class

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

class Base
{
protected:
    Base();
};

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

感谢。

2 个答案:

答案 0 :(得分:10)

如果您不希望客户端创建Base的实例,而只是您希望它是某些[派生]类的基类,和/或打算让它们被朋友使用,那么这才有意义Base的{​​(见下面的例子)。记住protected函数(和构造函数)只能从派生类和friend类中调用。

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

class Sample
{
 public:
   Sample()
   {
      //invoking protected constructor
      Base *p = new Base();
   }
};

答案 1 :(得分:4)

如果它总是一个基础(“混合”),是的。请记住,具有纯虚函数的类将始终是基础,但您无需执行此操作,因为它无论如何都无法实例化。

另外,请给它a public virtual destructor or a protected non-virtual destructor