执行下面的代码将在第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(){};
-与它的基类没有任何关联。
答案 0 :(得分:5)
否。
根据您的定义,Child
继承自Base
,没有Child
子对象就不可能创建Base
。
您应该提供一个参数(最好是默认值):
Child() : Base(42) {};
或者Base
可以提供一个默认的构造函数(可以不带参数地调用它),应该是
class Base {
public:
Base(int test = 42) {};
};
那么您的Child
就可以了。
答案 1 :(得分:0)
您仍然需要调用用户定义的构造函数。但是,如果您的应用程序允许,则可以向其传递一个虚拟参数。否则,这将是糟糕的应用程序设计,并且以后会在某些地方出现问题。
class Child : public Base
{
public:
Child ()
: Base(0)
{
/**....
....
code*/
};
Child(int test):Base(test)
{
};
};