struct A
{
void f(int);
};
struct B : A
{
void f(long);
};
B b;
b.f(1);
Почему void f(long) перекрыл void f(int)? Я думал, что прототип функции производного класса должен полностью соответствовать прототипу функции базового, то есть для перекрытая этой функции нужно не только одинаковое имя самой функции, а и тоже самое количество и тип параметров. Почему тогда в данном коде не overloading, а override?
Так устроен с++. Это на первых порах вводит всех в ступор. Нужно понимать, как происходит поиск подходящей функции. Вначале просмартивается класс на наличие подходящих функций. И только если они не находятся, начинается просмотр функций родителя. так как 1
можно без проблем преобразовать в long, то и будет вызвана функция void f(long);
Если интересны детали, читайте в стандарте в пункте 13.2 (Declaration matching).
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Хотелось бы узнать каковы области применения языков Си и Си++ и для каких платформ чаще их используют?
Добрый вечер! Помогите понять почему не скачивается файл с FTP сервера
Производится чтение из базы даннных слов и имен файлов (которые содержат эти слова) и запись их в текстовый файл в следующем формате: файл...
Разрабатываю клиент серверное приложение и в нем возникает ошибка при пересылке данныхЗаключается она в следующем: