Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
1 | |
а разве наследование такая уж важная возможность?11.07.2010, 14:17. Показов 2761. Ответов 35
Метки нет (Все метки)
0
|
11.07.2010, 14:17 | |
Ответы с готовыми решениями:
35
Существует ли в C++ такая возможность() Есть ли такая возможность в АСП? Есть ли такая возможность в C++ Builder Есть ли в Виндовс такая возможность |
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
11.07.2010, 14:26 | 2 |
nikkka, да. Ты считаешь иначе?
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
11.07.2010, 14:47 [ТС] | 3 |
CyBOSSeR, нет. просто непонятно почему.
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
11.07.2010, 14:51 [ТС] | 5 |
fasked, ну, если понадобилось улучшить класс, оставлая старый, то наследование "полезно". но разве это нужно так часто что для этого создали специалный раздел?
вы не беситесь))) вопроссы тупые, знаю. но ведь я только начинющий, и с наследованием пока работал недастаточно.
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
11.07.2010, 15:27 | 6 |
Не по теме: Хочешь узнать что такое настоящая инкапсуляция, Добавлено через 1 минуту Не по теме: мини реклама была Добавлено через 10 минут Ни кто не заставляет использовать ООП там где оно не уместно и не приносит выгоду. Где то тема есть: "зачем нужно ООП" тебе туда точно.
1
|
Заблокирован
|
||||||
11.07.2010, 15:28 | 7 | |||||
Сообщение было отмечено как решение
Решение
Добавь к наследованию полиморфизм и получишь больше пользы.
Самый простой пример. Например, пишешь ты игру. В игре у тебя есть куча всяких разных объектов: объекты-монстры класса Monster, объекты-препятствия класса Wall, объект-игрок класса Gamer, объекты-фоновые картинки класса BackgroundPicture и так далее. Что у них общего? Общее у них то, что они должны быть отрисованы на экране, а значит, у них должна быть функция-член (метод) Draw. Но у каждого класса функция разная (а иногда очень разная). Как поступить? Создаём базовый класс Entity с чисто виртуальной (абстрактной) функцией Draw, а все вышеперечисленные классы наследуем от Entity и функцию Draw перегружаем (переопределяем). Для чего? Все наши объекты хранятся в массиве в виде указателя. Но не простого указателя, а указателя на базовый класс (Entity *). Когда идёт отрисовка уровня, проходим по всем элементам этого массива и вызываем метод Draw, но так как реально там лежает не объекты класса Entity, а его наследники, то для каждого из них будет вызван подходящий Draw.
7
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
11.07.2010, 15:30 [ТС] | 8 |
Genius Ignat, http://ru.wikipedia.org/wiki/C... ject_Model -это?
Добавлено через 1 минуту NightmareZ, воистину полезный пост!... спасибо!...
0
|
11.07.2010, 15:35 | 9 | |||||||||||||||
Сообщение было отмечено как решение
Решение
если ты имеешь в виду, что поверх одного плохого кода, есть возможность прилепить еще один, то это неверно. Нужно не улучшать, а заранее проектировать иерархически верные наследования.
сейчас попробую привести банальный пример, но близкий к практике программирования. допустим нам надо реализовать библиотеку для работы с сокетами. Известно, что сокеты бывают разные, протоколы бывают разные и работать надо с ними по разному, но желательно, чтобы семантика и интерфейсы были одинаковы, чтобы не надо было пользователю класса перечитывать документацию по пять раз. Остановимся на таком различии, есть сокеты, которые имеют адреса, соответствующие протоколу IPv4, а есть работающие с протоколом IPv6. Есть сокеты UDP, TCP и т.д. Если для каждого такого сокета писать отдельную реализацию, то выходит просто неимоверное количество дублируемого кода (большинство функций реализуются все равно одинаково). А тогда почему бы не написать сначала базовый абстрактный класс (для предоставления интерфейса дочерним классам). Потом дочерние классы UDPSocket и TCPSocket, от TCP сделать еще один HTTPSocket. Понятное дело можно увлечься и тогда вся иерархия превратиться в труднопонимаемые куски кода, которые невозможно поддерживать. Дабы не быть голословным вот небольшой кусочек кода.
учитывая, что это самый небольшой примерчик, а настоящие реализации могут достигать сотен строк. ну а теперь надо от SocketTCP наследовать SocketHTTP. А без возможности наследования пришлось бы еще дублировать код и класса базового сокета. Ужас же.
Не по теме: К тому же наследование это тупо интересно :D Добавлено через 3 минуты Хотел написать еще про два класса IPv4Address и IPv6Address для полного счастья, вставить их членом класса и забыл
2
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
11.07.2010, 15:35 | 10 |
nikkka только сразу на эту технологию, лучше сразу не бросаться, как ни как ООП там тоже есть, и помимо ООП, много других моментов не легких в понимании для начинающего. Книги про COM есть в разделе COM/OLE.
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
11.07.2010, 15:36 [ТС] | 11 |
fasked, спасибо!... очень подробно и доступно!...
0
|
Заблокирован
|
|
11.07.2010, 15:37 | 12 |
А я б не советовал трогать COM вообще. Говорят, пока ***** не трогаешь - оно не воняет.
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
11.07.2010, 15:39 [ТС] | 13 |
Genius Ignat, спасибо. короче, пока просто учить с++, и не лезть в СОМ, пока не "поспею"?
Добавлено через 1 минуту NightmareZ, а почему *****????? чем СОМ плох???
0
|
11.07.2010, 15:40 | 14 |
Да и еще. Можно конечно написать один класс, который будет заниматься всем-всем-всем, но я думаю ты и сам понимаешь, что так делать нельзя. Поддерживать невозможно, объект будет дико "неповоротливым", тоже самое, как например на унитазе прилепить вохможности микроволновки и посудомойки, да еще и выход в интернет есть! Вроде все рядом, а ...
0
|
Заблокирован
|
|
11.07.2010, 15:40 | 15 |
1
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
11.07.2010, 15:42 [ТС] | 16 |
fasked,
Добавлено через 1 минуту NightmareZ, не, ну .NET точно придётся учить... а с СОМ посмотрим просто прочту что ни будь типа "краткого обзора", что бы быть в курсе.
0
|
Ignat
|
11.07.2010, 15:43
#17
|
Не по теме:
возможно ты поменял свое мнение.
0
|
Заблокирован
|
|
11.07.2010, 15:44 | 18 |
nikkka, а ещё я бы посоветовал вдумчиво почитать про паттерны проектирования. Например, вот тут: http://ooad.asf.ru/Patterns.aspx
Скорее всего тебе многое будет непонятно, но, думаю, подсознание некоторые моменты для себя отметит и в дальнейшем это тебе поможет правильно мыслить в рамках ООП.
0
|
Заблокирован
|
|
11.07.2010, 15:52 | 20 |
Грамотно можно построить что угодно на чём угодно. Но гвозди всё-таки лучше забивать молотком, а не отверткой и уж тем более не палкой-копалкой.
P.S. Я, наверное, всё-таки погорячился, назвам COM - ******. Он был хорош для своего времени. Но оно, какбэ прошло. Мне так кажется. Добавлено через 6 минут Скажем так, легендарная книга О ней не слышал, наверное, только глухой. Правда, каюсь, не читал
0
|
11.07.2010, 15:52 | |
11.07.2010, 15:52 | |
Помогаю со студенческими работами здесь
20
Есть ли такая возможность в postgresSQL - хранить в одном поле массив целых чисел и какой тип в таком случае используется? Наследование от Иоанна. Есть ли возможность как-то вызвать метод Gleb из класса а в классе с Установил Windows XP с флешки такая вот такая ситуатция ! Самая важная запчасть Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |