13

如何实例化派生类对象,其基类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:错误:在此上下文中

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

4

3 回答 3

18

有两种方法:

  • 将基类构造函数设为publicprotected
  • 或者,使派生类成为friend基类。看演示
于 2012-03-24T12:10:42.597 回答
2

您不能从唯一构造函数是私有的基类继承。1

因此,使基类构造函数公开/受保护,或添加另一个基类构造函数。


1. 除非,正如 Nawaz 指出的,你是基类的朋友。

于 2012-03-24T12:10:39.517 回答
1

你不能。这通常是使唯一的 c'tor 私有的原因,不允许继承。

于 2012-03-24T12:09:57.367 回答