繁体   English   中英

没有默认构造函数的超类的子类,而无需调用任何其他构造函数

[英]Subclass from a Superclass with no default constructor, without calling any other constructors

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

我想对类的构造函数做些小改动,所以我做了一个超类super的子类,称为sub 在构造sub时,我不想调用任何super的实际构造函数,但是super 没有默认的构造函数。

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

你们有什么建议?

如果基类不提供任何默认构造函数,则在不调用任何可用构造函数的情况下无法定义派生类。

当您从父类派生而来,或者甚至通过组合将该类用作类的私有成员时,您就被父类提供的公共接口所困扰。

因此,如果您对基类提供的构造函数不满意,则需要修改基类实现或将其重写为新类,并添加所需的接口修改。

在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手动编写构造函数。

正如其他人所说,想要什么(子类在没有子类时调用父类的默认构造函数)是不可能的。

但是,您可以做的是向父类添加一个受保护的默认构造函数。 这不会改变其他库用户的公共接口,但允许子类调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM