В C++ классы могут взаимодействовать через различные отношения, такие как наследование, композиция, агрегация и ассоциация. Эти отношения помогают моделировать реальную объектно-ориентированную систему.

Наследование (Inheritance)

Один класс (производный) наследует свойства и поведение другого класса (базового). Подробнее см. Наследование.

Композиция (Composition)

Класс включает в себя объекты других классов, показывая жесткую зависимость “часть-целое”.

class Engine {
public:
    void start() {}
};
 
class Car {
private:
    Engine engine;
public:
    void drive() {
        engine.start();
    }
};

Агрегация (Aggregation)

Класс содержит ссылки или указатели на объекты других классов, показывая слабую зависимость “часть-целое”.

class Engine {
public:
    void start() {}
};
 
class Car {
private:
    Engine* engine;
public:
    Car(Engine* eng) : engine(eng) {}
    void drive() {
        engine->start();
    }
};

Ассоциация (Association)

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

class Driver;
 
class Car {
public:
    void drive(Driver* driver) {}
};
 
class Driver {
public:
    void useCar(Car* car) {
        car->drive(this);
    }
};