Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Лекции PDF / ООП 05 Лек Простое наследование.pdf
Скачиваний:
57
Добавлен:
15.02.2015
Размер:
288.68 Кб
Скачать

Лекция 5

Простое наследование

6

Использование конструктора с параметрами

Рассмотрим теперь, как строится конструктор производного класса, предоставляемый программистом. Поскольку производный класс должен унаследовать все члены родительского, при построении объекта своего класса он должен обеспечить инициализацию унаследованных данных-членов.

Данные-члены производного класса могут использовать значения данных-членов родительского класса. Поэтому инициализацию унаследованных данных-членов класса должна быть выполнена до инициализации данных-членов производного класса. Конструктор производного класса строится с использованием следующего синтаксиса:

<констр_произв_класса> ( <список_параметров> ) : <констр_базового_класса> ( <список_аргументов> ) { <тело_конструктора> }

Здесь используется список инициализации элементов, в котором указывается конструктор базового класса. Часть параметров, переданных конструктору производного класса, обычно используется в качестве аргументов конструктора базового класса. Затем в теле конструктора производного класса выполняется инициализация данных-членов, принадлежащих собственно этому классу.

Первый конструктор класса Dot имеет вид:

Dot ( char Name ) : Coord ( ) { name = Name ; }

При вызове этого конструктора сначала вызывается конструктор базового класса Coord ( ), который инициализирует унаследованные данные-члены x и y нулями. Затем в теле конструктора данное-член name инициализируется значением параметра конструктора Name.

Второй конструктор класса Dot имеет вид:

Dot ( char Name , double X , double Y ) : Coord ( X , Y ) { name = Name ; }

При вызове второго конструктора сначала вызывается конструктор базового класса Coord ( double X, double Y ), который инициализирует унаследованные данные-члены x и y значениями параметров конструктора X и Y. Затем в теле конструктора данное-член name инициализируется значением параметра конструктора Name.

Переопределение и вызов членов базового класса

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

Иногда возникает необходимость вызвать функцию-член базового класса, а не ее переопределенный вариант, это можно сделать с помощью операции разрешения области видимости, применяемой в форме:

<имя_класса> :: <имя_члена>

Это дает возможность компилятору "видеть" за пределами текущей области видимости. Особенно часто это приходится делать при переопределении функций-членов. Переопределяемая функция-член может вызывать соответствующую функцию-член базового класса, а затем выполнять некоторую дополнительную работу (или наоборот).

В приведённом выше классе Dot была переопределена функция Print ( ). Тело функции содержит операторы, которые выводят на экран заголовок “Координаты точки ” и имя точки. Далее вызывается функция Print ( ), которая является членом родительского класса Coord, с помощью оператора:

Coord :: Print ( ) ;

Член родительского класса Coord функция Print ( ) выводит на экран в той же строке координаты точки. В результате на экране появится, например, следующий текст:

Координаты точки A :

x = 4

y = 5

Выжол Ю.А.

Объектно-ориентированное программирование