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

问题描述:

如何实例化派生类对象,其基类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: In constructor derived::derived()': accessing_private_ctor_in_base_class.cpp:9: error: base::base()' is private accessing_private_ctor_in_base_class.cpp:18: error: within this context

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

有两种方式:

  • 让基类的构造或者publicprotected
  • 或者,使派生类成为基类的friend。见demo
+1

@ Nawaz:让派生类成为基类的朋友! – 2012-03-24 12:18:23

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

+0

单身人士也有这方面的用途。 – chris 2012-03-24 13:25:42

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

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


1.除非像纳瓦兹指出的那样,你是基类的朋友。