Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2011, 21:02   #11
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В приведённом Вами, у деструктора есть объявление, но не определение.
Вообще уже посмотрел, что да, определение может быть. Я как-то в таких случаях создаю отдельный protected-метод, который и вызываю.
Спасибо за интересную подробность.
Abstraction вне форума Ответить с цитированием
Старый 26.10.2011, 23:37   #12
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Встречал лишь одно упоминание в какой-то книжке о написании кода в чисто виртуальных ф-иях и там предлагалось в них писать код логгирования или еще что-нибудь для детекта этой ситуации, т.е. примерно то, что вы и написали (cerr << "че за хрень"; ). на практике никогда такого не встречал и надеюсь не встречу. никакого полезного кода для наследников в чисто виртуальных ф-иях быть не должно. это глюк дизайна класса.
_Ч_ вне форума Ответить с цитированием
Старый 27.10.2011, 04:12   #13
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Это как? То есть, может быть что-то в этом духе?
Код:
void Draw(Device*)const=0{cerr << "What the?..";}
Странно... а смысл?
Спецификация чистого метода доступна только для виртуальных функций !
Код:
virtual void Draw(Device*)const=0{cerr << "What the?..";}
И эта функция обязана быть переопределена в производных классах, чтобы производный класс не был абстрактным.
An1ka вне форума Ответить с цитированием
Старый 27.10.2011, 18:48   #14
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от _Ч_ Посмотреть сообщение
Встречал лишь одно упоминание в какой-то книжке о написании кода в чисто виртуальных ф-иях и там предлагалось в них писать код логгирования или еще что-нибудь для детекта этой ситуации, т.е. примерно то, что вы и написали (cerr << "че за хрень"; ). на практике никогда такого не встречал и надеюсь не встречу. никакого полезного кода для наследников в чисто виртуальных ф-иях быть не должно. это глюк дизайна класса.
Кто вам сказал такую глупость, что в чисто виртуальных функциях не должно быть никакого кода. Уж по крайней мере призадумалисчь бы над тем, что чисто виртуальный деструктор обязан иметь определение!

Вам надо быстрее приобретать опыт программирования на С++, а не демонстрировать свое невежество!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 27.10.2011, 22:55   #15
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

"никакого полезного кода для наследников в чисто виртуальных ф-иях быть не должно. это глюк дизайна класса."

От того, что код можно написать в чисто виртуальных ф-иях еще не значит что его туда нужно писать. Полезный код, который пригодился бы в наследниках и засунутый в чисто виртуальную ф-ию - это скорее всего кривое проектирование класса.
Деструктор - особый случай и он конечно же должен быть при любых обстоятельствах. Необходимость в чисто виртуальном деструкторе - скорее всего из-за кривого дизайна класса. Приведите пример из жизни (не академический и не высосанный из пальца), где это понадобилось.
Где понадобился код в чисто виртуальных ф-иях?
Где потребовался чисто виртуальный деструктор и почему там не получилось обойтись протектед конструкторами? Чисто вирт. деструктор потребует явного написания деструкторов в наследниках. А зачем это требовать, если кого-то устраивает то, что генерится по дефолту. Если в базе деструктор виртуальный, то в наследниках он будет виртуальным всегда, хоть дефолтный, хоть явно определенный.
Код диангостики вызова чисто виртуального метода - не является полезным для наследников.

Ссылки на тему:
http://alenacpp.blogspot.com/2005/03/blog-post.html
http://www.gotw.ca/gotw/031.htm

В общем, подтвертиде свои высказывания примерами.
_Ч_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сборщик мусора в динамическом списке Homutova_Julia Помощь студентам 4 17.06.2011 19:09
Объекты классов, деструкторы, конструкторы GerNick Общие вопросы C/C++ 18 15.03.2011 08:30
Строки разных цветов в списке. AntiKaspersky Общие вопросы .NET 2 14.01.2011 12:42
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18