2014-12-25 2 views
0

У меня есть базовый класс, который я не могу изменить исходный код. Я делаю из него производный класс, и я пытаюсь создать конструктор без аргументов для этого производного класса. Проблема заключается в том, что я не могу определить конструктор по двум причинам: Для использования базового класса не существует конструктора без аргументов. Я не могу передать значение по умолчанию для конструктора базы.как объявить конструктор по умолчанию

class base 
    { 
     public: 
     base (A arg) 
     { 

     } 
    }; 

    class derived : public base 
    { 
     public: 
     derived() : base (arg) //ERROR 
     { 

     } 
    }; 

Есть ли решение для определения конструктора без аргументов для производного класса? Cordialement,

+1

У вас нет выбора, кроме как придумать подходящий объект 'A', который вы можете передать конструктору' Base'. – jrok

+1

Нет. Вам нужно найти способ передать объект 'A' в' base (A) '. – juanchopanza

+4

_ «Я не могу передать значение по умолчанию для конструктора базы». _ - Почему бы и нет? Это какое-то искусственное ограничение или вы не знаете, как это сделать? –

ответ

0

Поскольку вы не можете изменить базовый класс, единственная опция - передать аргумент его конструктору. Вы можете сделать это довольно легко, построив временный экземпляр A и передав его базовому классу в ваш инициализированный список производных классов ctor.

derived::derived() : base (A()) 
{ 
} 

В коде выше base(A()) создаст временный экземпляр A и передать его в конструктор base.