c ++是否可以在不基于其基类的派生类中创建构造函数?

时间:2020-08-21 11:30:08

标签: c++ oop inheritance constructor-overloading

执行下面的代码将在第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(){};-与它的基类没有任何关联。

2 个答案:

答案 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)
    {

    };
};
相关问题