Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Вадим от Март 25, 2005, 13:03 Кто знает почему так?
Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Sergeich от Март 25, 2005, 17:02 Невиртуальные деструкторы в Qt используются когда:
1. предполагается что от класса не будут наследоватся 2. в классах - наследниках QObject Во втором случае Qt как-то сама разбирается какой деструктор вызывать. Например если написать Код:
вызовется деструктор MyWidget, а не QWidget, хотя QWidget::~QWidget не виртуальный. Если тебе интересно как Qt это делает скомпиляй ее в debug версии и посмотри в отладчике. З.Ы. Если разберешься - отпишись, самому интересно Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Winstrol от Март 26, 2005, 19:05 Цитата: "Sergeich" Невиртуальные деструкторы в Qt используются когда: 1. предполагается что от класса не будут наследоватся 2. в классах - наследниках QObject Во втором случае Qt как-то сама разбирается какой деструктор вызывать. Код:
Ну вы даете, друзья. Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Sergeich от Март 26, 2005, 20:47 Цитата: "Winstrol" Код:
Ну вы даете, друзья. Да, деструктор QObject виртуальный, однако деструкторы Qt-шных классов от которых наследуются сплошь и рядом, таких как QWidget и все его наследники не виртуальные. Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Zigmar от Март 27, 2005, 01:10 Цитата: "Sergeich" Да, деструктор QObject виртуальный, однако деструкторы Qt-шных классов от которых наследуются сплошь и рядом, таких как QWidget и все его наследники не виртуальные. QWidget насдудуется от QObject. Поскольку диструтор виртуальный в QObject, то он виртуальный и во всех классах, которые от него наследуются. Onсe virtual - virtual for ever, т.е. во всех наследуемых классов, даже если они этого явно не указывают. Учите С++. Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: lepsai от Март 27, 2005, 23:33 Цитировать One virtual - virtual for ever, т.е. во всех наследуемых классов, даже если они этого явно не указывают. Учите С++. Ну если сам маэстро наказал... то мы, ламера тупые, будем учить этот... как его?... c++... ты понял, Сергеич? :D Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Racheengel от Март 28, 2005, 10:04 хм... а что, таки Зигмар не прав? :)
это я насчет "virtual once-virtual forever". вообще ИМХО самый верных подход к виртуальности - это когда компилятор сам решает, стоит ли делать метод виртуальным или нет. Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Sergeich от Март 28, 2005, 12:26 Цитата: "Racheengel" хм... а что, таки Зигмар не прав? :) это я насчет "virtual once-virtual forever". Зигмар прав. Просто я забыл про эту фичу C++. Производный класс может только добавлять и заменять указатели в v-table, а удалить их оттуда он не может. Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Racheengel от Март 29, 2005, 08:04 еще была бы фича в С++ - типа "закрытия" методов в производных классах - было б рулеззз :)
Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: lepsai от Март 29, 2005, 10:43 Цитировать еще была бы фича в С++ - типа "закрытия" методов в производных классах - было б рулеззз это как? Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Racheengel от Март 29, 2005, 11:39 например, я хочу в производном классе "закрыть" несколько методов базового (чтобы их невозможно было вызвать). Можно, конечно, затолкать их в приваты... Но проще бы было ввести модификатор типа deprecated.
Название: Почему у большинства классов Qt деструкторы не виртуальные ? Отправлено: Denwer от Апрель 01, 2005, 14:58 А чем тебя не устраивает закрытое наследование, и открытие тех методов которые нужно открыть? Эт первое. Дальше, по поводу введения новой фичи, так вот если комитет по стандартизации будет заботиться о каждом программисте на С++ то из этого языка получилась бы уже куча мусора, на котором программировать вообще нельзя. Для того что бы ввести что то новое, люди обдумывают это месяцами и годами, для того что бы не навредить данному языку. Кстати есть вещи намного нужнее данной, да тот же typeof и auto например.
|