Конструктор по умолчанию для унаследованного класса

Я уменьшил свою проблему до следующего примера кода:

class pokemon{
    public:
        pokemon(int n);
};

class MewTwo : public pokemon {
    public:
        MewTwo(int n);
};

MewTwo::MewTwo(int n) {}

Что вызывает ошибку:

нет соответствующей функции для вызова "Покемон:: покемон()

Что я думаю, так это то, что конструктор по умолчанию для pokemon вызывается, когда я пытаюсь написать конструктор MewTwo, которого не существует. Я относительно не знаком с С++, поэтому я просто угадываю здесь. Любые идеи?

Ограничение: исправления не могут изменять или добавлять публичных членов в классы.

Ответ 1

Фактически то, что вы ищете, это список инициализации членов. Измените свой унаследованный класс-конструктор на следующее:

class MewTwo : public pokemon {
    public:
        MewTwo(int n) : pokemon(n) {}
};

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

Отъезд: http://www.cprogramming.com/tutorial/initialization-lists-c++.html для получения дополнительных примеров!

Ответ 2

Попробуйте следующее:

class pokemon{
    public:
        pokemon(int n);
};

class MewTwo : public pokemon {
    public:
        MewTwo(int n) :pokemon(n){}
};