Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ О структуризации кода https://www.cyberforum.ru/ cpp-beginners/ thread1249197.html
У меня в последние дни возникает множество вопросов, связанных с реализацией грамотной структуры кода. Я хочу чтоб мои проекты были с учётом "хорошего тона программирования в С++". Вопросов...
C++ Для каждого времени года вывести расход, а затем - общую сумму расхода
как написать правильно? #include <iostream> using namespace std; const int Seasons = 4; const char* Snames = {"Spring", "Summer", "Fall", "Winter"}; void fill(double* pa, int Seasons);...
C++ Как реализовать таймер в консольном приложении?
И как-нибудь без while и sleep, чтобы программа не висела. Пытался делать через winapi, но не понял как функцию, выполняемую при "тикании" делать. Добавлено через 2 часа 12 минут ладно, вопрос...
C++ Компилятор выдает ошибку: [Error] ld returned 1 exit status #include <iostream> using namespace std; const int Max = 5; int fill_array(double ar, int limit); void show_array(double ar, int n); void reverse_array(double ar, int n); int main() { https://www.cyberforum.ru/ cpp-beginners/ thread1249119.html
C++ Освобождение памяти при удалении структуры https://www.cyberforum.ru/ cpp-beginners/ thread1249066.html
Есть структура с указателем на блок памяти, если удалить структуру,память внутри структуры освободится или же надо освободить память внутри структуры? struct test { char * name; test(char* a)...
Как работает std::piecewise_construct? C++
Здравствуйте! Мне необходимо содержать std::map с уникальными значениями, что-то вида: S get(std::string k) { static std::map<std::string, S> cache = { }; return *(cache.emplace(k,...
C++ Решил написать текстовый редактор. Что можно почитать?
Здравтвуйте! Я решил написать текстовый редактор. Но к сожилению гугл не выдал ни статей по этой теме, ни исходников. Если у кого-то есть исходники или статьи буду очень благодарен.
C++ При некоторых компиляциях программа медленно исполняется Крестики-нолики очень странно себя ведут. Иногда при компиляции все работает нормально, а иногда программа очень медленно выполняется и непонятно от чего это зависит. Если раскомментировать одну... https://www.cyberforum.ru/ cpp-beginners/ thread1249005.html
C++ Выйти из цикла до того, как n равно 0 https://www.cyberforum.ru/ cpp-beginners/ thread1249001.html
Друзья подскажите почему условие цикла игнорируется?Прописал до тех пор пока не равно нулю она всё равно делит на ноль. char y; do { int n,i(10),k(1); cout <<"Введите число : "; cin...
C++ Зачем в определении std::forward () нужен объект remove_reference? Зачем в определении std::forward() нужен объект remove_reference ? И почему не могут быть выведены аргументы шаблона? Я написал вот такой вот код,все отлично работает,в обоих случаях возвращается... https://www.cyberforum.ru/ cpp-beginners/ thread1248971.html
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.08.2014, 23:18 0

Почему при переопределении виртуального метода в производном классе выводится метод базового?

30.08.2014, 23:18. Просмотров 871. Ответов 4
Метки (Все метки)

Ответ

Цитата Сообщение от Zazy Посмотреть сообщение
при переопределении виртуального метода в производном классе выводится метод базового
Тут нет переопределения виртуального метода базового класса в производном.

Например, если Ваш компилятор поддерживает C++11, попробуйте 16 строку написать так:
C++
1
virtual void print() override { std::cout << b << std::endl; } //явное указание о переопределении виртуального метода
И увидите характерную ошибку:
error: ‘virtual void B::print()’ marked override, but does not override
Происходит это потому, что константность функции входит в ее сигнатуру, т.е.
C++
1
2
void f() const;
void f();
Это разные функции-члены.

Для Вашего примера можно вообще убрать virtual и результат не изменится. Т.к. в классе B нет функции, которая переопределяла бы функцию из класса A. Чтобы это случилось, надо добавить в B соответствующую реализацию:
C++
1
virtual void print() const { std::cout << "b const" << std::endl; }
Ну, а если нужно чтобы работал такой вариант:
C++
1
2
const B b1;
b1.print();
То достаточно добавить в класс B видимость функции из A:
C++
1
using A::print;


Вернуться к обсуждению:
Почему при переопределении виртуального метода в производном классе выводится метод базового?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2014, 23:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вызов виртуального метода базового класса из указателя производного
Допустим есть такой код: #include &lt;iostream&gt; class Base { public: virtual void f() {...

Создайте в производном классе метод, определяющий формулу, которая изображена на рисунке
Создайте в производном классе метод, определяющий:формулу(изображена на рисунке 1)

Использование указателя на метод вместо виртуального метода
Имеется базовый класс Base. Имеется производный от Base класс Derived. В классе Derived требуется...

Ошибка при вызове виртуальной функции в производном классе
Здравствуйте, извините, если подобная тема появлялась, но либо у меня руки не от туда растут, либо...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.