[英]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.