![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
zzkoderzzzx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
Известно, что надо всегда делать деструктор виртуальным.
Тем не менее он не становится виртуальным без участия программиста. Значит разработчиками С++ была предусмотрена ситуация, когда есть необходимость в невиртуальном деструкторе. Какие вы можете привести примеры таких ситуаций? |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
zzkoderzzzx |
|
||||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
STL использует классы, но при этом нарушает все парадигмы ООП. Поэтому пример не очень хороший. Добавлено @ 16:41
В настоящих ОО-языках все методы виртуальные. Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 16:42 |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
что значит нарушает? Код STL вообще не обьектно ориентированный. вызов виртуального метода имеет накладные расходы и далеко не всегда имеет смысл делать функцию виртуальной. все методы виртуальны в Java, но скажем в C# такого нет. Это сообщение отредактировал(а) azesmcar - 16.10.2013, 16:57 |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
да, но далеко не всегда нужно применять ООП -------------------- Обижено школьников: 8 |
|||
|
||||
zzkoderzzzx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
не ОО код значит плохой код Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 16:59 |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
![]() |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
О как. Давай-ка по пунктам, на примере std::vector, расскажи какие-такие "парадигмы" ООП нарушаются. Это сообщение отредактировал(а) vinter - 16.10.2013, 17:24 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
с этого места поподробнее, что именно нарушается определение настоящего ООЯ в студию плиз расскажите это Кнуту и Вирту Деструктор должен быть виртуальным, если предполагается (позволяется) наследование. Даже при "чиста ОО" подходе далеко не все классы должны иметь наследников. С++ мультипарадигмный язык, в нем необязателен тезис "все есть объект", так что делать все деструкторы виртуальными неразумно. |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Можно было бы сразу призвать в этот топик санитаров, но пойдём более конструктивным путём.
![]() Откуда, уважаемый, дровишки? Вы где всего этого, мягко скажем, бреда поначитались? Нам бы знать, так сказать, на будущее. -------------------- |
|||
|
||||
zzkoderzzzx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
1. protected члены-данные нарушают принцип инкапсуляции в классах-наследниках 2. нельзя полноценно наследовать классы от vector за счет невиртуального деструктора 3. нет виртуальных методов, а следовательно и полиморфизма Основные 3 принципа ООП нарушены. Можно добавить замечание про код с макросами, бессмысленными названиями, чрезмерным использованием символа _ (часто встречается даже __ ). Такой код практически нигде не пройдет code review . |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Нельзя наследоваться потому, что он для этого не предназначен. Неужели ты думаешь, что любой класс предназначен для наследования? Открою тебе секрет. Весь STL построен на полиморфизме ![]() Полиморфизм это не виртуальные функции. Виртуальные функции всего лишь один из методов для реализации динамического полиморфизма. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |