У меня есть базовый класс с необязательной виртуальной функцией
class Base {
virtual void OnlyImplementThisSometimes(int x) {}
};
Когда я компилирую это, я получаю предупреждение о неиспользованном параметре x. Есть ли какой-то другой способ, которым я должен был реализовать виртуальную функцию? Я переписал это так:
class Base {
virtual void OnlyImplementThisSometimes(int x)
{
x = 0;
}
};
У меня также проблема в том, что, если я не буду осторожен, подкласс, который я создаю, может реализовать неправильную функцию, а затем я не замечаю из-за перегрузки: например,
class Derived : public Base {
void OnlyImplementThisSometimes(int x, int y) { // some code }
};
Derived d;
Base *b = dynamic_cast<Base *>(&d);
b->OnlyImplementThisSometimes(x); // calls the method in the base class
Метод базового класса был вызван, потому что я реализовал производную функцию с параметром "int y", но предупреждений об этом нет. Это обычные ловушки в C ++ или я неправильно понял виртуальные функции?