|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.12.2007, 16:07 | #1 |
Регистрация: 19.12.2007
Сообщений: 4
|
Кто сможет разъяснить как и зачем использовать виртуальные функции в C++?
Привет! Гвоздь в следующем:
У меня есть три класса: для работы с датами(вычисления дня недели, кол-ва дней по дате и пр.х. ), для работы со временем и еще один класс наследующий от этих двух. Программа работает нормально все как надо, но препод озадачил, мол нужно использовать виртуальные функции. Что это такое примерно знаю, но к сожалению не настолько. С использованием еще не сталкивался. Плиз кто-нибудь разъясните что это такое! А желательно б еще исходник с этими функциями чтоб посмотреть как работает все это. Прилагаю исходник моей лабы. Написано на 6 билдере.
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет вселенной я не уверен.
Альберт Энштейн. |
19.12.2007, 18:12 | #2 | |
C# developer
Форумчанин
Регистрация: 03.10.2007
Сообщений: 393
|
Цитата:
Код:
Start Print Test2 Cansel Print Press any key to continue Функция которую можно переопределить в новом классе. А если ее не переопределять? То вызовется функция предка. Код:
Start Print Test1 Cansel Print Press any key to continue
I like WPF
|
|
19.12.2007, 18:24 | #3 |
ИСККОНный хакер
Форумчанин
Регистрация: 08.11.2007
Сообщений: 195
|
kommunist, человек спросил, зачем они нужны, а не как их писать. Буквы писать мы все умеем, а вот составлять из них слова...
Виртуальные функции позволяют потомку залазить внутрь родителя. Т.е. в родительском классе могут быть вызовы функций, содержание которых определяется в дочернем классе. ЗЫ. Технически не очень точно, но концептуально доходчиво ЗЫЫ. kommunist, уже голову сломал, но так до меня глупого и не дошло: а что изменится, если из Вашего кода virtual убрать? Может мат часть подучите? А то что человека информацией снабжаете, о которой и сами толком представления не имеете.
#define QUESTION bb || !bb
|
19.12.2007, 23:25 | #4 |
Регистрация: 19.12.2007
Сообщений: 4
|
Спасибо за исходник. Вот еще один вопросец по этой теме: допустим я работаю с объектом созданным из класса потомка, функция переопределена. Как вызвать функцию родительского класса из созданного объекта?
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет вселенной я не уверен.
Альберт Энштейн. |
20.12.2007, 07:12 | #5 |
ИСККОНный хакер
Форумчанин
Регистрация: 08.11.2007
Сообщений: 195
|
Функция переопределяется, когда нужно изменить функциональность. Если Вам нужна функциональность родителя – просто создайте объект от него. Если функция в потомке переопределена, то вызывать родительскую нельзя.
Вот вам обоим классы, в которых демонстрируется, для чего используются виртуальные функции Код:
Действия для обработки шахматных фигур ничем не отличаются друг от друга. Отличие только в манере ходить. Это отличие и вынесено в виртуальную функцию. Без виртуальной функции пришлось бы городить либо switch/case, либо в реализацию каждого класса фигуры вставлять все функции родителя, что, согласитесь, не рационально. Наличие виртуальной функции без тела делает класс абстрактным, так что объект такого класса создать нельзя. Такой класс используется для создания потомков. ЗЫ. Админы, перепишите обработчик “[code]”! А то что-то цвет как-то по велению удара бубна меняется.
#define QUESTION bb || !bb
Последний раз редактировалось Vedrus; 20.12.2007 в 07:24. |
20.12.2007, 14:19 | #6 |
Регистрация: 19.12.2007
Сообщений: 4
|
Vedrus, большое спасибо за более подробное разъяснение, респект!
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет вселенной я не уверен.
Альберт Энштейн. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Люди добрые, помогите кто чем сможет. | Chuprin2006 | Microsoft Office Excel | 4 | 11.06.2008 17:03 |
Одиночное наследование Виртуальные функции | Brunette | Помощь студентам | 3 | 08.05.2008 19:23 |
Виртуальные машины! | Marsik | Софт | 17 | 23.04.2008 20:33 |
Помогите кто сможет, пожалуйста | b00s | Microsoft Office Access | 5 | 05.04.2008 12:57 |