![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
serendip |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 20.12.2005 Репутация: нет Всего: нет |
Здравствуйте!
Подскажите, пожалуйста, чем отличается композиция от наследования.Наследование-это понятно что такое. А композиция? ![]() Заранее благодарю |
|||
|
||||
TIGERоX |
|
|||
начинающий... ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 7.9.2005 Репутация: нет Всего: 1 |
усть два класса
т.е. мы не используем наследование а создаем объект в самом классе |
|||
|
||||
serendip |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 20.12.2005 Репутация: нет Всего: нет |
Спасибо
![]() |
|||
|
||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
у буча это, кажется, называется агрегацией?
|
|||
|
||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
|
|||
|
||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
что значит "предпочитай"? наследование и агрегация - разные вещи, для разных целей. их сравнивать, все-равно что сравнивать мотоцикл с автомобилем.
Это сообщение отредактировал(а) blackofe - 10.1.2006, 01:17 |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Совет правильный. При прочих равных условиях композиция предпочтительней наследования, несмотря на то, что при ее использовании иногда требуется больше усилий по кодированию. Причина в том, что композиция представляет более слабую зависимость, чем наследование.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
threef |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Айайай, чему вы учите! Композиция и наследование используются для решения совершенно разных задач ! Ну-ка, продемонстрируй полиморфизм на базе композиции. Еще бы сравнили операторы if и while. |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
threef
Думаю, если слово "наследование" заменить на "наследование реализации" вопрос несколько прояснится. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
threef |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
void
ты меня совсем запутал, давай письмом. Реализация - это обьект, класс - это тип, что такое реализация типа ? |
|||
|
||||
Vyacheslav |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Айайай. Как Вы задачи наследования ограничиваете. ![]() Вы никогда о множественном наследовании не слышали? Так вот задача:
Нужен класс С, имеющий func_a() и func_b() ; То есть требуется реализовать повторное использование кода без copy-past Как будем решать задачу с учетом того, что возможны три решения? ![]() Виноват, четыре решения ![]() -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
Vyacheslav |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
А что бы Вы не думали, что только меня мучают сомнения, что в конкретном случае применить, я дам пару цитат по данной проблеме
http://uic.rsu.ru/doc/programming/c++/TIC2...html#Heading428
-------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
ребятки, вопрос дюже страшно интересный. я всегда полагал, что агрегация и наследование - планеты разные. и, используя наследование, я строю иерархию (или же, строя иерархию, я использую наследование). а агрегация для меня всегда была чем-то вроде - набить структуру полями.
концептуально, чем композиция лучше наследования при прочих равных условиях? просветите, плиз, меня неученого. |
|||
|
||||
np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Это сообщение отредактировал(а) np9mi7 - 11.1.2006, 09:43 |
||||
|
|||||
pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
Если объект создаётся в обявлении класса, то это называется композицией.
Если же в объявлении находятся только указатели на него, то это называется агрегацией. Добавлено @ 14:59 Inheritance and Composition Inheritance is the feature of classes that allows one class to be derived from another. The class that you derive a new class from is called the base class, and the new class is called the derived class. Classes create a hierarchy, which is usually shown as a tree, where base classes are higher in the tree. Each derived class inherits all of the public members of the base class, and all of the private members of the base class remain private. The third member access specifier, protected, allows instances of a derived class to have access to that member. Further, you can redefine functions in base classes, providing unique functionality in the derived class. The derived class may explicitly call the function from the base class using the namespace modifier (: ![]() Composition is simply defining a class as a member of another class, and all normal scope rules apply. A class that is a member of another class does not enjoy the same benefits as a derived class, and only has access to public members of the containing class. Object-oriented design principles are encapsulation, inheritance, and polymorphism. All of these design principles are possible in C++ with classes, and programming with OOD principles is called object-oriented programming. -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |