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



如何实例化基类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()'是私有的accessing_private_ctor_in_base_class.cpp:18:错误:在此上下文

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

有两种方法:

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

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

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


1.除非,正如纳瓦兹所指出的,你是基类的朋友

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

相关内容

  • 没有找到相关文章

最新更新