Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Для чего нужны Виртуальные классы и функции?? 
:(
    Опции темы
Daevaorn
Дата 4.10.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Romikgy @  4.10.2006,  10:56 Найти цитируемый пост)
Цитата(EvgenZ @  4.10.2006,  08:48 )
Так создание комфорта себе и окружающим и есть хороший тон 


имхо не всегда!
мне лично не сильно нравится писать лишние букофки в коде, то бишь мне это не комфортно! отсель вывод , это не хороший тон   
PS а вообще хороший и не хороший это дело относительное, так что смысл спора ушел в зрительный зал, я заканчиваю в этой теме. 

Ага, а потом в службу поддерки твоей компании будут названивать программисты, которым не посчастливилось использоваь твой код(ну допустим, ты библиотеку классов писал), с разными вопросами. Начальство за это не похвалит. Не кто не будет лазить по файлам(если ты предоставил  подробную документацию, конечно) и искать базовый класс, в который метод foo() помечен как виртуальный. Обычно после таких случаев, в стандартах кодирования компании появляется пунт об обязятельном указании полной сигнатуры метода в объявлении класса.
PM MAIL WWW   Вверх
SparF
Дата 4.10.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



В свое время прочитал книгу Шилдта "Полный справочник по с++", к сожалению, много писать на с++ не пришлось - стояли другие задачи. Однако в блокнотике остались кое-какие записи (пардон, если в чем-то повторюсь, просто хочется собрать инфу в одном месте и подвести своего рода итог):
Виртуальные функции:
- функция-член, объявляемая в базовом классе и переопределяемая в производном;
- перед ее определением в базовом классе ставится virtual
- в базовом классе - определяется тип интерфейса;
- переопределение в производном классе создает конкретный метод;
- если указатель на объект базового класса устанавливается на объек производного класса, содержащий виртуальную функцию,  то выбор требуемой функции основывается на типе объекта, на который ссылается указатель, причем этот выбор осуществляется в ходе выполнения программы. Т.о. если указатель ссылается на объекты разных типов, то будут вызываться разные виртуальные функции. Это относится и к ссылкам на объекты.
- могут вызываться и как обычные функции, однако при этом их "особые свойства теряются".
- прототип переопределяемой функции должен совпадать с прототипом в базовом классе;
- виртуальная функция не может быть статической или дружественной;
- конструкторы не могут быть виртуальными, на деструкторы это ограничение не распространяется;
- для переопределения вирт. функции в производном классе используется термин "замещение";
- атрибут virtual наследуется;
- виртуальные функции являются "иерархическими", т.е. виртуальную функцию не обязательно замещать, в этом случае вызывается функция, определяемая в базовом классе.
Чисто виртуальная функция
- виртуальная функция, не имеющая определения в базовом классе;
- для ее объявления используется 
Код

virtual тип имя  (список_параметров) = 0;

это объявление просто задает интерфейс, не больше;
- класс, содержащий хотя бы одну виртуальную функцию называется абстрактным - его объекты создать не возможно, и использовать его можно лишь как основу для производных классов, однако на него можно создавать ссылки и указатели.
- абстрактные классы и виртуальные функции позволяют создавать библиотеки классов, носящие обобщенный характер.


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
Kuvaldis
Дата 4.10.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



SparF, 
Цитата

- конструкторы не могут быть виртуальными,

Можно создать виртуальный метод Clone(), который и будет выполнять роль виртуального конструктора (про это в Страуструпе есть smile 


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
0x07L
Дата 4.10.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: нет
Всего: 5



Цитата(SparF @  4.10.2006,  13:56 Найти цитируемый пост)
прототип переопределяемой функции должен совпадать с прототипом в базовом классе

Есть допущение относительно возвращаемого значения. Вот выдержка из черновика стандарта С++ от 19.10.2005 (здесь когда-то скачивал):
Цитата

The return type of an overriding function shall be either identical to the return type of the overridden function or covariant with the classes of the functions. If a function D::f overrides a function B::f, the return types of the functions are covariant if they satisfy the following criteria:
— both are pointers to classes or references to classes
— the class in the return type of B::f is the same class as the class in the return type of D::f,or is an unambiguous
 and accessible direct or indirect base class of the class in the return type of D::f
— both pointers or references have the same cv-qualification and the class type in the return type of D::f has the same cv-qualification as or less cv-qualification than the class type in the return type of B::f


PM MAIL   Вверх
Sergio
Дата 17.10.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Kuvaldis, я вставил твой код, но компилятор просит библиотеку какую-то smile 

Это сообщение отредактировал(а) Sergio - 17.10.2006, 18:16
PM MAIL ICQ   Вверх
JackYF
Дата 17.10.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Sergio, может, скажешь какую?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EvgenZ
Дата 17.10.2006, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Странно, какая там библиотека может быть...  там даже и не используется ничего.


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Rockie
Дата 17.10.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



возможно: 
Цитата
fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1245 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.