如何解决c ++是否可以在不基于其基类的派生类中创建构造函数?
执行下面的代码将在第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(){};
-与它的基类没有任何关联。
解决方法
否。
根据您的定义,Child
继承自Base
,没有Child
子对象就不可能创建Base
。
您应该提供一个参数(最好是默认值):
Child() : Base(42) {};
或者Base
可以提供一个默认的构造函数(可以不带参数地调用它),应该是
class Base {
public:
Base(int test = 42) {};
};
那么您的Child
就可以了。
您仍然需要调用用户定义的构造函数。但是,如果您的应用程序允许,则可以向其传递一个虚拟参数。否则,这将是糟糕的应用程序设计,并且以后会在某些地方出现问题。
class Child : public Base
{
public:
Child ()
: Base(0)
{
/**....
....
code*/
};
Child(int test):Base(test)
{
};
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。