После переопределения одной перегрузки log(string) перестал компилироваться
class Logger {
public:
virtual void log(int code);
virtual void log(const std::string& msg);
};
class FileLogger : public Logger {
public:
void log(int code) override;
};
FileLogger fl;
fl.log(std::string("started")); // ошибка компиляции
Почему метод базового класса стал недоступен?
- Имя log в наследнике скрыло все перегрузки базы
- override удаляет остальные перегрузки из базы
- Виртуальные методы нельзя перегружать
- string нельзя неявно передать по const&
