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

9 c++ polymorphism inheritance base-class

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

class Base
{
protected:
    Base();
};

class Child : protected Base
{
public:
    Child() : Base();
};
Run Code Online (Sandbox Code Playgroud)

谢谢.

Naw*_*waz 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();
   }
};
Run Code Online (Sandbox Code Playgroud)