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(){};, который не имеет никакой связи с его базовым классом.


person MoA    schedule 21.08.2020    source источник
comment
Я бы предположил, что самый простой способ - либо просто дать вашему дочернему классу BASE cunstructor и передать какое-то фиктивное значение, либо вам нужно будет создать конструктор base:base(){}   -  person alovaros    schedule 21.08.2020


Ответы (2)


No.

По вашему определению Child наследуется от Base, и невозможно создать Child без подобъекта Base.

Вместо этого вы должны предоставить аргумент (какой бы ни был хорошим значением по умолчанию):

Child() : Base(42) {};

В качестве альтернативы Base может предоставить конструктор по умолчанию (тот, который можно вызывать без аргументов), который будет

class Base {
public:
    Base(int test = 42) {};    
};

тогда ваш Child будет в порядке.

person 463035818_is_not_a_number    schedule 21.08.2020

Вам все еще нужно вызвать пользовательский конструктор. Однако вы можете передать ему фиктивный аргумент, если ваше приложение это допускает. Иначе это плохой дизайн приложения и что-то потом где-то сломается.

class Child : public Base
{

public:
    Child ()
         : Base(0)
    {
        /**....
           ....
           code*/
    };
    Child(int test):Base(test)
    {

    };
};
person Tanveer Badar    schedule 21.08.2020