我有一个非常基本的问题,但我找不到一个可接受的解决方案(我的生活故事):
我想对类的构造函数进行一些小改动,因此我创建了一个超类sub
的子类,称之为super
。构造sub时,我不想调用super
的任何真正构造函数,但super
不有默认构造函数。
编辑super
类以添加默认构造函数是可能的,但它将涉及编辑经常更新的库,这是它自己的蠕虫库。
你们有什么建议?
答案 0 :(得分:4)
如果基类没有提供任何默认构造函数,则无法在不调用任何可用构造函数的情况下定义派生类。
答案 1 :(得分:1)
当您从父类派生,或者甚至通过组合使用该类作为您的类的私有成员时,您仍然坚持使用父类提供的公共接口。
因此,如果您对基类提供的构造函数不满意,则需要修改基类实现或将其重新编写为新类,添加您想要的任何接口修改。
答案 2 :(得分:1)
在C ++ 11中,您可以使用构造函数继承来使您的生活更轻松:
class super
{
public:
super( int x );
// more constructors
};
class sub : public super
{
using super::super; // now all constructors is here
};
在上面的代码中,sub::sub(int)
自动定义为sub::sub(int x) : super(x) {}
,因此您无需手动在sub
中编写构造函数。
答案 3 :(得分:0)
正如其他人所说,你想要的是什么(子类在没有父类的默认构造函数的情况下调用它)是不可能的。
但是,您可以做的是将 protected 默认构造函数添加到父类。这不会改变其他库用户的公共接口,但会允许子类调用它。