![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Ага, а потом в службу поддерки твоей компании будут названивать программисты, которым не посчастливилось использоваь твой код(ну допустим, ты библиотеку классов писал), с разными вопросами. Начальство за это не похвалит. Не кто не будет лазить по файлам(если ты предоставил подробную документацию, конечно) и искать базовый класс, в который метод foo() помечен как виртуальный. Обычно после таких случаев, в стандартах кодирования компании появляется пунт об обязятельном указании полной сигнатуры метода в объявлении класса. |
|||
|
||||
| SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
В свое время прочитал книгу Шилдта "Полный справочник по с++", к сожалению, много писать на с++ не пришлось - стояли другие задачи. Однако в блокнотике остались кое-какие записи (пардон, если в чем-то повторюсь, просто хочется собрать инфу в одном месте и подвести своего рода итог):
Виртуальные функции: - функция-член, объявляемая в базовом классе и переопределяемая в производном; - перед ее определением в базовом классе ставится virtual - в базовом классе - определяется тип интерфейса; - переопределение в производном классе создает конкретный метод; - если указатель на объект базового класса устанавливается на объек производного класса, содержащий виртуальную функцию, то выбор требуемой функции основывается на типе объекта, на который ссылается указатель, причем этот выбор осуществляется в ходе выполнения программы. Т.о. если указатель ссылается на объекты разных типов, то будут вызываться разные виртуальные функции. Это относится и к ссылкам на объекты. - могут вызываться и как обычные функции, однако при этом их "особые свойства теряются". - прототип переопределяемой функции должен совпадать с прототипом в базовом классе; - виртуальная функция не может быть статической или дружественной; - конструкторы не могут быть виртуальными, на деструкторы это ограничение не распространяется; - для переопределения вирт. функции в производном классе используется термин "замещение"; - атрибут virtual наследуется; - виртуальные функции являются "иерархическими", т.е. виртуальную функцию не обязательно замещать, в этом случае вызывается функция, определяемая в базовом классе. Чисто виртуальная функция - виртуальная функция, не имеющая определения в базовом классе; - для ее объявления используется
это объявление просто задает интерфейс, не больше; - класс, содержащий хотя бы одну виртуальную функцию называется абстрактным - его объекты создать не возможно, и использовать его можно лишь как основу для производных классов, однако на него можно создавать ссылки и указатели. - абстрактные классы и виртуальные функции позволяют создавать библиотеки классов, носящие обобщенный характер. -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
SparF,
Можно создать виртуальный метод Clone(), который и будет выполнять роль виртуального конструктора (про это в Страуструпе есть -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| 0x07L |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: нет Всего: 5 |
Есть допущение относительно возвращаемого значения. Вот выдержка из черновика стандарта С++ от 19.10.2005 (здесь когда-то скачивал):
|
||||
|
|||||
| Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: 0 Всего: 1 |
Kuvaldis, я вставил твой код, но компилятор просит библиотеку какую-то
Это сообщение отредактировал(а) Sergio - 17.10.2006, 18:16 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Sergio, может, скажешь какую?
|
|||
|
||||
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
Странно, какая там библиотека может быть... там даже и не используется ничего.
-------------------- <удалено администрацией форума> |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
возможно:
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |