Если у меня есть класс сказатьC++ - Параметры чистой виртуальной функции
class Base {
public:
virtual void func() = 0;
};
Это является основой для двух других классов
class DerivedA1 : public Base {
public:
virtual bool func(string command);
};
class DerivedB1 : public Base {
public:
virtual void func();
}
class DerivedA2 : public DerivedA1 {
public:
bool func(string command); //This one implements it differently
}; //its base class.
Разрешены выше? Я объявил func() без параметров, но затем я использую его с параметрами. У меня аналогичная ситуация в моем коде, что я не могу опубликовать, потому что это его часть школьного задания, и я получаю сообщение об ошибке, подобное
error: no matching function for call to Base::fucn(std::string&)
note: candidate is: virtual bool Base::move();
note: candidate expects 0 arguments, provided 1
Я хочу FUNC(), который будет использоваться по-разному в разных ее производные классы. Как я могу исправить эту проблему?
Нет, это запрещено. Переопределения «виртуальных» функций базового класса должны иметь одну и ту же подпись. –
Существует концепция, называемая * контравариантность *, которая позволяет производному классу изменять аргумент метода (но не произвольно), но здесь это не применимо. Вы можете использовать * аргументы по умолчанию *: http://en.cppreference.com/w/cpp/language/default_arguments – mike
Вы можете сделать еще один класс для параметра. virtual void func (MyBaseParemeterClass *) = 0; – QuentinUK