繁体   English   中英

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

[英]Instantiate a derived class object, whose base class ctor is private

如何实例化一个派生类对象,其基类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()'是private acces_private_ctor_in_base_class.cpp:18:错误:在此上下文中

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

有两种方法:

  • 使基类构造函数为publicprotected
  • 或者,使派生类成为基类的friend 看看演示

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

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


除非,正如纳瓦兹指出的那样,你是基地的朋友。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM