如何实例化一个派生类对象,其基类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:错误:在此范围内 上下文
如何修改代码以删除编译错误?
答案 0 :(得分:16)
有两种方法:
public
或protected
。friend
。见demo 答案 1 :(得分:2)
你不能从只有构造函数是私有的基类继承。 1
因此,要使基类构造函数为public / protected,或者添加另一个基类构造函数。
<小时/> <子> 1。除非Nawaz指出,否则你是基类的朋友。
答案 2 :(得分:1)
你做不到。这通常是让唯一的私人成为私人的理由,不允许继承。