c ++是不是可以在不基于其基类的派生类中创建构造函数?
Posted
技术标签:
【中文标题】c ++是不是可以在不基于其基类的派生类中创建构造函数?【英文标题】:c++ Is it possible to create a constructor in a derived class that is not based on its base class?c ++是否可以在不基于其基类的派生类中创建构造函数? 【发布时间】:2020-08-21 11:30:08 【问题描述】:执行下面的代码会给 Child()/**........code*/
行一个错误,说:没有匹配函数调用 'Base::Base()' 并且候选 Base::Base(int) 需要 1 个参数,但没有提供。
class Base
public:
Base(int test)
;
;
class Child : public Base
public:
Child ()
/**....
....
code*/
;
Child(int test):Base(test)
;
;
所以我想知道是否有办法在派生类中使用构造函数 - 例如:Child();
- 与其基类没有任何关联。
【问题讨论】:
我想最简单的方法是给你的子类 BASE cunstructor 并交出一些虚拟值,或者你需要创建一个base:base()
构造函数
【参考方案1】:
没有。
根据您的定义,Child
继承自 Base
,如果没有 Base
子对象,则无法创建 Child
。
相反,您应该提供一个参数(任何一个好的默认值):
Child() : Base(42) ;
另外,Base
可以提供一个默认构造函数(可以不带参数调用的构造函数),即
class Base
public:
Base(int test = 42) ;
;
那么你的Child
就可以了。
【讨论】:
【参考方案2】:您仍然需要调用用户定义的构造函数。但是,如果您的应用程序可以容忍,您可以向它传递一个虚拟参数。否则,这是糟糕的应用程序设计,稍后会在某个地方出现问题。
class Child : public Base
public:
Child ()
: Base(0)
/**....
....
code*/
;
Child(int test):Base(test)
;
;
【讨论】:
以上是关于c ++是不是可以在不基于其基类的派生类中创建构造函数?的主要内容,如果未能解决你的问题,请参考以下文章