| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Известно public и private, а что такое: |
| Автор: Pilligrim 31.7.2006, 18:01 |
| VC++ у меня довольно давно(пишу на нем уже где-то 1,5 года), читал много книг по С++, в частности великого Бьярна Страустрапа(кстати всем советую), давно знаю и успешно применяю(даже слишком везде) классы, соответственно знаю ключевые слова public и private, но вот как-то раз натолкнулся на такие ключевые слова как virtual и protected и словил себя на мысли что я даже не знаю что это такое. Объясните кто-нить плиз что это такое?! |
| Автор: MaxWave 31.7.2006, 18:21 |
| Не знаешь виртуал??? Разве Страус об этом не рассказывает??? Странно, значит плохо читал. virtual - ключ. слово перед определением функции в классе. Оно означает, что данная функция является виртуальной и должна унаследоваться производными классами. Они определяют как бы общий интерфейс производных классов,т.е. в производных классах эта ф-я переопределяется. Очень удобно использовать при созднании иерархии классов. А вообще почитай г. Шилдта - там все понятно описано. Использование широко - ищи в нете, сразу найдешь. |
| Автор: vinter 31.7.2006, 18:24 | ||
Данные обьявленные как protected можно юзать в производных классах
Полностью согласен |
| Автор: Pilligrim 31.7.2006, 18:29 |
| Спасибо Вам. Я всё понял. |
| Автор: Rockie 31.7.2006, 21:40 | ||||||
| Pilligrim, ты имеешь ввиду virtual и protected внутри класса, или при наследовании от виртуального класса? если у нас иерархия A / \ B C \ / D и в классе A у нас, например
то при обращении объекта класса D к этому a будет ошибка, так как объект d как бы содержит 2 копии a: от класса B, и от C:
чтобы этого не происходило, используется наследование от виртуального базового класса, с использованием virtual:
модификатор protected в наследовании означает, что данные, определенные в родительском классе, как public, в классе-потомке станут protected |
| Автор: Exception 31.7.2006, 21:50 | ||
Главное применение ключевого слова virtual - обозначить, что метод может быть переопределён:
|
| Автор: sergejzr 31.7.2006, 21:54 |
| Exception, всё верно, только мы не в С# |
| Автор: Exception 31.7.2006, 21:56 |
| Воистину. У вас, похоже, override нету |
| Автор: sergejzr 31.7.2006, 22:03 | ||||
| Улавливаете разницу между virtual и "простым" определением? (особенно смотри p2)
Добавлено @ 22:04 Вот вывод проги:
|
| Автор: Exception 31.7.2006, 22:21 |
| Вот как у вас хитро |
| Автор: sergejzr 1.8.2006, 00:36 | ||||
А это ещё одна особенность. если хотя бы одна функция в класса определена как =0, класс будет считаться полностью абстрактным и обьект такого класса создать нельзя. Для того чтобы получить обьект, ребёнку необходимо определить все такие фукции. например:
|
| Автор: ILAgent 1.8.2006, 00:54 | ||
Удивительно ! Что ж ты полтора года писал тогда ? Вобщем, тут надо читать литературу, так просто про сложный полиморфизм не расскажешь. Да и на форуме про это много писалось уже. |
| Автор: Rockie 1.8.2006, 11:43 | ||||
по этой же причине виртуальный деструктор будет знать, какой объект убить
|
| Автор: Pilligrim 1.8.2006, 19:06 | ||||
ILAgent, писал проги в которых не использовал возможность наследования классов.
Я уже всё понял. Мне долго объяснять не надо! Всем плиз |