实例化派生类对象,其基类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
我如何修改代码以删除编译错误?
答
1.除非像纳瓦兹指出的那样,你是基类的朋友。
您不能从其唯一的构造函数是私有的基类继承。
因此,使基类构造函数为public/protected,或者添加另一个基类构造函数。
1.除非像纳瓦兹指出的那样,你是基类的朋友。
@ Nawaz:让派生类成为基类的朋友! – 2012-03-24 12:18:23