来自Superclass的子类,没有默认构造函数,没有调用任何其他构造函数

时间:2014-03-07 04:59:50

标签: c++ class

我有一个非常基本的问题,但我找不到一个可接受的解决方案(我的生活故事):

我想对类的构造函数进行一些小改动,因此我创建了一个超类sub的子类,称之为super。构造sub时,我不想调用super的任何真正构造函数,但super 有默认构造函数。

编辑super类以添加默认构造函数是可能的,但它将涉及编辑经常更新的库,这是它自己的蠕虫库。

你们有什么建议?

4 个答案:

答案 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 默认构造函数添加到父类。这不会改变其他库用户的公共接口,但会允许子类调用它。