Ключевое

Наследование интерфейса (interface inheritance) позволяет классу использовать контракт базового класса. Наследование реализации (implementation inheritance) позволяет классу использовать конкретную реализацию методов базового класса.


Наследование интерфейса:

  • Определение: Подкласс наследует сигнатуры методов без их реализации.
  • Цель: Обеспечить единообразие интерфейсов.
  • Пример: Использование чисто виртуальных функций.
class Shape {
public:
    virtual void draw() = 0; // Чисто виртуальная функция
};
 
class Circle : public Shape {
public:
    void draw() override {
        // Реализация метода
    }
};

Наследование реализации:

  • Определение: Подкласс наследует как сигнатуры, так и реализацию методов.
  • Цель: Повторное использование кода.
  • Пример: Наследование методов с конкретной реализацией.
class Animal {
public:
    void eat() {
        // Реализация метода
    }
};
 
class Dog : public Animal {
    // Использует реализацию метода eat() из базового класса
};

Совместное использование:

class Printable {
public:
    virtual void print() = 0;
};
 
class Document : public Printable {
public:
    void print() override {
        // Реализация метода print()
    }
 
    void save() {
        // Реализация метода save()
    }
};
 
class Report : public Document {
    // Наследует реализацию save() и print() из Document
};
  • Document реализует интерфейс Printable и предоставляет реализацию для метода print().
  • Report наследует реализацию методов print() и save() от Document.