实例化派生类对象,其基类ctor是私有的

时间:2012-03-24 12:05:39

标签: c++ inheritance compiler-errors private-constructor

如何实例化一个派生类对象,其基类ctor是私有的?

由于派生类ctor隐式调用基类ctor(私有),编译器会给出错误。

请考虑以下示例代码:

#include <iostream>

using namespace std;

class base
{
   private:
      base()
      {
         cout << "base: ctor()\n";
      }
};

class derived: public base
{
   public:
      derived()
      {
         cout << "derived: ctor()\n";
      }
};

int main()
{
   derived d;
}

此代码提供编译错误:

  

access_private_ctor_in_base_class.cpp:在构造函数中   derived::derived()': accessing_private_ctor_in_base_class.cpp:9: error: base :: base()'是私有的   access_private_ctor_in_base_class.cpp:18:错误:在此范围内   上下文

如何修改代码以删除编译错误?

3 个答案:

答案 0 :(得分:16)

有两种方法:

  • 使基类构造函数为publicprotected
  • 或者,使派生类成为基类的friend。见demo

答案 1 :(得分:2)

你不能从只有构造函数是私有的基类继承。 1

因此,要使基类构造函数为public / protected,或者添加另一个基类构造函数。

<小时/> <子> 1。除非Nawaz指出,否则你是基类的朋友。

答案 2 :(得分:1)

你做不到。这通常是让唯一的私人成为私人的理由,不允许继承。