Ключевое
Наследование интерфейса (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.