Наследование и полиморфизм в C++
НАВИГАЦИЯ ПО СТРАНИЦЕ
Наследование в C++
Наследование является ключевым аспектом объектно-ориентированного программирования, позволяя создавать новый класс на основе существующего, повторно используя его свойства и методы. Рассмотрим простой пример наследования:
// Базовый класс
class Animal {
public:
void eat() {
cout << "Animal is eating." << endl;
}
};
// Производный класс
class Dog : public Animal {
public:
void bark() {
cout << "Dog is barking." << endl;
}
};
В этом примере класс Dog наследует от класса Animal. Теперь объект класса Dog может использовать как методы класса Dog, так и методы класса Animal.
Dog myDog;
myDog.eat(); // Метод из базового класса
myDog.bark(); // Метод из производного класса
Полиморфизм в C++
Полиморфизм позволяет использовать объекты производных классов так, как если бы они были объектами базового класса. В C++ полиморфизм реализуется с использованием виртуальных функций.
// Базовый класс с виртуальной функцией
class Shape {
public:
virtual void draw() {
cout << "Drawing a shape." << endl;
}
};
// Производный класс с переопределением виртуальной функции
class Circle : public Shape {
public:
void draw() override {
cout << "Drawing a circle." << endl;
}
};
Теперь можно создать массив объектов базового класса и вызывать их методы, не зная конкретного типа объекта:
Shape* shapes[2];
shapes[0] = new Shape();
shapes[1] = new Circle();
for (int i = 0; i < 2; ++i) {
shapes[i]->draw(); // Вызывает соответствующую функцию в зависимости от типа объекта
}
Этот код вызовет метод draw() в зависимости от фактического типа объекта в массиве. Это демонстрирует полиморфизм в действии.
Наследование и полиморфизм вместе обеспечивают гибкость и повторное использование кода, что является одним из ключевых преимуществ объектно-ориентированного программирования.