Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Наследование и виртуальные функции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Одномерные массивы http://www.cyberforum.ru/cpp-beginners/thread957805.html
Прошу помочь с заданием В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) произведение отрицательных элементов массива ; 2) сумму положительных элементов массива,...
C++ Найти периметр четырехугольника Даны координаты вершин произвольного четырех угольника найти периметр четыре угольника использовать функцию для вычисления длины одной стороны Добавлено через 7 минут Срочняк http://www.cyberforum.ru/cpp-beginners/thread957784.html
C++ Прочитать 7z архив
Доброго времени суток. Нужно прочитать 7z архив. А именно достать инфу(список файлов, версия архиватора и тп). Может кто подскажет под какими байтами там всё это дело лежит?
Что значит ->? C++
Наткнулся на непонятное место в непонятном коде. Оно показалось мне особенно непонятным, загуглить не получилось. Что значит: new...
C++ Как понять int a(int x,int y, int z)? http://www.cyberforum.ru/cpp-beginners/thread957717.html
какое значение будет у переменной а?
C++ Как подключить к проекту OpenGL и GLUT ? В С++ я новичок, перехожу на него с С#, так что многого еще не понимаю. Необходимо подключить к моему классу GameWindow OpenGL и GLUT. GLUT скачал и имею файлы glut.h, glut.def, glut.dll, glut.lib.... подробнее

Показать сообщение отдельно
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
19.09.2013, 15:28
В Вашем конкретном примере путаница вызвана тем, что в производном классе есть такие же данные члены, к которым в обращаетесь в information().
Имхо, дублирование данных лишнее, нужно просто убрать данные из производного класса и всё.

Цитата Сообщение от qazc Посмотреть сообщение
А чтобы использовать функции setName() и setAge() для класса наследника, то нужно их тоже объявить виртуальными и переопределить в наследнике?
если вы собираетесь их переопределять и/или использовать указатель на базовый класс, инициализированный указателем на производный класс, то функции нужно сделать виртуальными

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct st_base {
    virtual void display() { cout << "st_base::display()" << endl; }
    //void display() { cout << "st_base::display()" << endl; }
};
 
struct st_der : st_base {
    void display() { cout << "st_der::display()" << endl; }
};
 
int main () {
 
    st_base* pointer = new st_der;
    
    pointer->display(); }
вывод
st_der::display()
если сделать функцию display не виртуальной, то при обращении к указателю на базовый st_base, инициализированный указателем на производный st_der, будет вызывать display из базового st_base
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru