Что такое наследование и переопределение?

Наследование - еще одна важная составляющая объектно-ориентированного программирования. Благодаря ему производные классы наследуют функциональность базовых и добавляют к ней свои собственные возможности. Например, мы можем создать базовый класс vehicle (транспортное средство) и породить от него два производных класса: truck (грузовик) и helicopter (вертолет). Оба имеют один и тот же базовый класс (и содержат все методы базового класса), что экономит время при программировании.

Хотя классы helicopter и truck порождаются от одного и того же базового класса vehicle, каждый из них по-своему модифицирует его поведение, так что в итоге мы получаем два вполне самостоятельных класса.

 

Помните об отличиях между модификаторами доступа private, protected и public. К открытым (public) членам класса можно обращаться из любого места программы, к закрытым (private) - только из объектов того же класса, а к защищенным (protected) - из объектов того же самого или производных от него классов.

 

Оба производных класса могут пользоваться методами vehicle, например, start() (завести) или move() (двигаться). Однако вертолет движется иначе, чем грузовик. Как дополнить или даже изменить поведение класса vehicle, чтобы приспособить его для новых классов? Одна из возможностей заключается в переопределении методов базового класса (переопределение методов считается важной составляющей объектно-ориентированного программирования). Когда мы переопределяем метод базового класса в производном классе, новая версия метода полностью заменяет старую. Таким образом мы можем изменить поведение базового класса в производном классе и заставить его вести себя так, как нам нужно.

Давайте посмотрим, как наследование и переопределение применяются на практике. Создайте новый проект с именем inheritance. Объявим класс транспортного средства vehicle с двумя методами, start() и move():
#include <iostream.h>
class vehicle {
public: void start();
void move();
};

Метод start() класса vehicle в нашем примере будет просто выводить строку "Starting...", а метод move() - строку "Driving...":
#include <iostream.h>
class vehicle {
public: void start();
void move();
};
void vehicle::start() { cout << "Starting...\n";}
void vehicle::move() { cout << "Driving...\nn";}
.
.
.

Теперь создадим новый класс helicopter и сделаем его производным от класса vehicle.

















Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: