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

1 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)
    {

    };
};
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有办法在派生类中使用构造函数 - 例如:Child(){};- 与其基类没有任何关联。

for*_*818 5

不。

根据您的定义, aChild继承自,Base并且在Child没有Base子对象的情况下无法创建 a 。

相反,您应该提供一个参数(无论是一个好的默认值):

Child() : Base(42) {};
Run Code Online (Sandbox Code Playgroud)

或者Base可以提供一个默认构造函数(一个可以不带参数调用的构造函数),那就是

class Base {
public:
    Base(int test = 42) {};    
};
Run Code Online (Sandbox Code Playgroud)

那么你Child就可以了。