Термин «композиция» обычно используется в терминах объектного моделирования как выражение отношения «имеет» и является формой ассоциации (другой является агрегацией). Обычно это противопоставляется «наследованию» (отношения «is-a»). Итак:
В чем разница между составом и агрегацией? Композиция подразумевает, что ребенок не может существовать без контекста родителя.
Например, в доме есть одна или несколько комнат. Это композиционные отношения. Удалите дом и комнаты тоже перестанут существовать. Дом также имеет ряд жителей, являющихся примерами человека. Это агрегирующие отношения, потому что эти люди существуют вне контекста этого дома.
Делегирование - не более чем деталь реализации. Класс имеет открытый интерфейс, который описывает его состояние и поведение. То, как это реализовано, не имеет значения. Может делегировать другим объектам или нет.
Вы заметите, что и A и B из вашего примера имеют один и тот же внешний интерфейс. Чаще всего делают что-то вроде этого:
// this represents an interface
class A {
public:
virtual void printStructure() = 0;
}
с конкретными классами:
class ConcreteA : A {
public:
virtual void printStructure() { ... }
}
и
class DelegateA : A {
public:
DelegateA(A& a) { this.a = a; }
virtual void printStructure() { a.printStructure(); }
private:
A a;
}
Извините, возможно, мои синтаксические ошибки C ++. Я немного ржавый.