В чем разница между наследованием и составом? - PullRequest
4 голосов
/ 21 сентября 2011

Как следует из названия, значение обоих ускользает от меня.

Ответы [ 6 ]

2 голосов
/ 21 сентября 2011

Наследование выражает отношение is-a, в то время как композиция выражает отношение has-a между двумя классами.

Примером композиции является многоугольник.Имеет упорядоченную последовательность очков.В терминах C ++:

struct Polygon {
  std::vector<Point> points;
};

В то время как logic_error является exception:

struct logic_error : public exception {
};
1 голос
/ 21 сентября 2011

Наследование означает наследование чего-либо от родителя.Например, вы можете унаследовать глаза своей матери или наследовать телосложение вашего отца.

Это означает получение свойств, характеристик и поведения из родительского класса.Таким образом, вы можете parent.walk (), parent.sleep (), parent.sleep () или что угодно.

Контейнеровоз или, может быть, состав довольно сложно объяснить.

Или, может быть, в машине есть тормоз.Автомобиль состоит из тормоза.Но тормоз не наследуется от тормоза .. разные концепции.Я знаю очень странное объяснение ... но вот сколько я могу сделать, я думаю.

Давайте посмотрим на этот код:

class Parent 
{
   public :
     void sleep() ; void eat() ; void walk()  ; 
     string eyeColor; int height ; 
};

class Child: public Parent
{

}

Таким образом, класс Child может наследовать функции и атрибутыРодитель, но, конечно, у него может быть цвет глаз матери или отца. Даже если атрибуты ребенка отличаются, он все равно может делать все, что может сделать Родитель.

Теперь композиция - это другое дело.Ребенок может иметь игрушку или родитель может иметь ребенка.Итак, я мог бы сделать:

class Toy
{
  string model ; 
};

class Child
{
   Toy transformersToy ;
};

Итак, у Дитя теперь есть игрушка-трансформер ... но наследует ли Дитя атрибут transformersToy.model?Нет, потому что это не наследование.

1 голос
/ 21 сентября 2011

Просто Google Inheritance vs Composition вы получите много результатов.
Используя java в качестве примера

public class Banana extends Fruit{ //<---Inheritance Banana is-a Fruit
    private Peel bananaPeel; //<--Composition banana has a Peel
    public Peel getPeel(){
        return bananaPeel;
    }
}
1 голос
/ 21 сентября 2011

Как отметил pmr, наследование - это отношение is-a, состав - это отношение has-a.

Композиция обычно используется для переноса классов и для выражения отношений между классами, которые содержат друг друга.

Наследование используется для полиморфизма, когда у вас есть базовый класс, и вы хотите расширить или изменить его функциональность.

0 голосов
/ 11 января 2018
Наследование

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

0 голосов
/ 21 сентября 2011

наследование - это связь между классами, контейнерность - это связь между экземплярами классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...