【问题标题】:Instantiate a derived class object, whose base class ctor is private实例化一个派生类对象,其基类 ctor 是私有的
【发布时间】:2012-03-24 12:05:38
【问题描述】:

如何实例化一个派生类对象,其基类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;
}

这段代码给出了编译错误:

accessing_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:错误:在此范围内 上下文

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

【问题讨论】:

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


    【解决方案1】:

    有两种方式:

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

    【讨论】:

    • @Nawaz:让派生类成为基类的朋友行得通!
    【解决方案2】:

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

    所以让基类构造函数公开/受保护,或者添加另一个基类构造函数。


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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 单身人士也有这个用途。
      猜你喜欢
      • 2019-03-02
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2023-02-03
      • 2023-03-19
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多