Ответы на экзаменн-е вопросы за 1-й курс. Препод- Рудой И.Б / Ответы / 05 Понятие наследование в Срр. Примеры
..doc05 Понятие наследование в Срр. Примеры.
Наследование
Наследование - это способность брать существующий - базовый класс и порождать из него новый класс - потомок, с наследованием всех его атрибутов и поведения. Это пожалуй самая впечатляющая возможность объектно-ориентированного программирования и, возможно, единственное коренное отличие С++ от Си.
Рассмотрим отвлеченный пример из реальной жизни - классификационную схему живых организмов. По этой схеме растительные и живые царства делятся на группы, так называемые типы. Каждый тип, в свою очередь, делится на классы, отряды, семейства и далее. Группы более низкого уровня наследуют характеристики групп более высоких уровней. Так, из утверждения о том, что волк относится к семейству псовых, вытекает сразу несколько положений. Из него следует, что у волков хорошо развиты слух и обоняние, поскольку таковы характеристики псовых. Так как псовые входят в отряд хищных, это утверждение говорит еще о том, что волки питаются мясом. Поскольку хищные относятся к млекопитающим, это утверждение говорит и о том, что волки имеют волосяной покров и регулируемую температуру тела. Наконец, так как млекопитающие являются позвоночными, мы узнаем и то, что у волков есть позвоночник.
Волк -> Псовые -> Хищники -> Млекопитаю
Пример наследования
Чтобы задать отношения наследования между классами, надо при описании нового класса после имени класса поставить двоеточие и далее перечислить через запятую имена потомков.
В этом примере из базового класса shape порождается класс circle:
class shape { < Объявление класса
public:
double xo, yo; < Данные (координаты)
shape(double x, double y); < Конструктор
virtual double area(void); < Виртуальная функция элемент
};
Связывание порожденного класса с базовым
v
class circle : public shape { < Объявление порожденного класса
public:
double radius; < Дополнительные данные
double area(void); < Заимствованная функция элемент
circle(double x, double y, double r); < Конструктор