![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Если нужно вызвать ЧИСТО ВИРТУАЛЬНУЮ ФУНКЦИЮ в БАЗОВОМ классе, то надо так:
Если ПЕРЕОПРЕДЕЛЕННУЮ из ПРОИЗВОДНОГО класса, то так:
2Дрон Указатели на чисто виртуальные функции (а не переопределенные), в VTBL не помещаются!!! Это сообщение отредактировал(а) LPBOY - 8.8.2005, 15:58 --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
ОФФТОП: Кстати я и не знал, что [pure virtual] и [abstract] это один и тот же термин.
Это чисто Сишный, что ли термин? Ведь в паскале прямо ключевое слово abstract есть. |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
LPBOY
Что-то я тебя не понимаю. В первом примере, например, ты вообще непонятно что делаешь.
А зачем кому-то в здравом уме вызывать чисто виртуальную функцию???? Вызывают всегда переопределённые, а чисто виртуальная функция это только интерфейс, который служит для обобщения правил доступа к производным классам. О чём спор? Добавлено @ 14:15 comcon1
Вроде да. В Java и С# тоже используется термин abstract. Это сообщение отредактировал(а) Дрон - 8.8.2005, 14:16 -------------------- Да. Именно так. |
||||
|
|||||
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Чисто виртуальные функции используются для определения поведения по умолчанию, например. Не я их придумал... Я просто подумал что ей надо вызвать именно чисто виртуальную функцию из самого базового класса.
Спор о том что ты в ответ на мой пост, в котором я сказал что чисто вирт. ф-ии вызывать можно и что только статически, сказал, что это бред. Приведи аргументы, в таком случае... --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
LPBOY
Создай лучше отдельную тему. И опиши свои "претензии" И ещё, я не совсем понимаю твою терминологию. Что значит вызывать чисто виртуальные функции? Что, в этом контесте, значит вызывать статически?
Какого ещё поведения по умолчанию, если у них нет тела??? -------------------- Да. Именно так. |
|||
|
||||
| LPBOY |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Это значит вызывать функции корорые объявлены таким образом: virtual void f()=0; а не те которые переопределены в производных классах.
В этом контексте и не только в этом "статически" оэначает во время компиляции, а обычные вирт. ф-ии связываются во время выполнения.
Опять 25. Тело может быть - смотри мой первый пример!!! P.S. Ты че издеваешься надо мной? --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||||
|
|||||||
| Дрон |
|
||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Чисто вирт. функции ничем не отличаются от "обычных" виртуальных. Они тоже связываются во время выполнения. По-моему, разницу можно заметить только попытавшись вызвать чисто вирт. функции в конструкторе базового класса (там механизм виртуальности не сработает, т.к. объект ещё не инициализирован, и выведет "pure virtual function call").
Пойдём другим путём Скажи, будет ли работать этот пример:
Или я просто не понимаю о чём ты говоришь?? -------------------- Да. Именно так. |
||||||
|
|||||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
ДАА!!!
Первый пример его работает!! Тока что скомпилил. То есть абстрактные функции могут иметь тела, но вызываться тело будет только статически. Круто!!! |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Мне без разницы будет ли он работать. Ты вызови именно ЧИСТО виртуальную функцию динамически, а не переопределенную... Добавлено @ 14:55 Спасибо большое comcon1, хоть кто-то поверил --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Забавно. Это называется pure virtual function with a body. В нормальных условиях не используется Добавлено @ 15:02 LPBOY
Не надо кричать. Надо просто уметь изъясняться так, чтобы и остальным было понятно Разве не чувствуешь разницы: "чисто виртуальная функция" и "чисто виртуальная функция с телом". -------------------- Да. Именно так. |
||||
|
|||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Ты меня сначала до нервного срыва довел, а теперь говоришь "не надо" кричать
(У меня две операционки в одной не работает инет, а в другой VC - благодаря тебе я последний час туда-сюда грузился как сумасшедший
Кто бы говорил Ладно надеюсь этот спор закончен... --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
аминь
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
LPBOY
Признаю, что проглядел в твоём примере, что тело-то определено. Это настолько редкая фишка (и ИМХО нафиг не нужная), что я долго врубится не мог Как-то я невнимательно читаю... Видимо, фраза "для чисто виртуальных функций виртуальный механизм не работает" шокировала меня настолько, что остальное я и не заметил -------------------- Да. Именно так. |
|||
|
||||
| CoreDumped |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.8.2005 Репутация: нет Всего: 1 |
абстрактным должен объявляться базовый клас а не функция. Класс, который имеет хотябы одну чистую виртуальную функцию является абстрактным и может использоваться только при наследовании. |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Я просто не знал, что pure virtual и abstract - одно и то же.
Вообще все, вроде разрулилось, правда мы долго не могли воткнуть, что абстрактные функции могут иметь тело |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |