Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объектно-ориентированное программирование на C++.pdf
Скачиваний:
61
Добавлен:
23.03.2016
Размер:
1.88 Mб
Скачать

Перегруженная операция присваивания

Базовые

сведения

Введение

Ссылки

Классы

Поля и методы

Конструкторы

Создание и уничтожение объектов Копирование

объектов

Одиночное

наследование

Множественное

наследование

Обобщённое

программирова-

ние

Перегрузка

операций

Исключения

Проблема копирования объектов возникает также при присваивании. Поэтому, забегая вперёд, покажем на примере класса IntArray, как определить свою операцию присваивания:

class IntArray {

...

IntArray & operator = ( IntArray & obj );

...

};

IntArray & IntArray :: operator = ( IntArray & obj ) { if ( this != & obj ) {

delete [] a; n = obj .n;

a = new int [n ];

memcpy (a , obj .a , n* sizeof ( int ));

}

return * this ;

}

34 / 99

Основной способ наследования в C++

Базовые

сведения

Введение

Ссылки

Классы

Поля и методы

Конструкторы

Создание и уничтожение объектов Копирование

объектов

Одиночное

наследование

Множественное наследование

Обобщённое

программирова- ние

Перегрузка

операций

Исключения

Синтаксис одиночного наследование в C++ выглядит как

class ИмяПроизводногоКласса : public ИмяБазовогоКласса

{

...

};

Если конструктор базового класса не имеет параметров (является конструктором по умолчанию), его вызов добавляется компилятором С++ в конструктор производного класса автоматически.

Впротивном случае необходимо явно вызывать конструктор базового класса в конструкторе производного класса.

Вязыке C++ вызов конструктора базового класса X из конструктора производного класса Y выполняется аналогично вызовам конструкторов полей:

Y :: Y( формальные_параметры_конструктора_Y )

:X( фактические_параметры_конструктора_X )

{... }

35 / 99

Пример: одиночное наследование

Базовые

1

class Animal

 

сведения

2

{

 

 

Введение

 

 

3

private :

 

 

Ссылки

 

 

 

char

* species ;

 

Классы

4

 

 

public :

 

 

Поля и методы

5

 

 

 

 

 

 

Конструкторы

6

Animal ( char * species );

 

Создание и

7

};

 

 

уничтожение

8

 

 

 

объектов

 

 

 

 

 

 

 

Копирование

9

Animal :: Animal ( char * species ): species ( species )

{}

объектов

10

 

 

 

Одиночное

 

 

 

 

class Dog : public Animal

 

наследование

11

 

Множественное

12

{

 

 

наследование

13

private :

 

 

Обобщённое

 

 

14

char

* breed ;

 

программирова-

 

 

public :

 

 

ние

15

 

 

Перегрузка

16

Dog ( char * bread );

 

операций

17

};

 

 

 

 

 

Исключения

18

 

 

 

 

 

 

 

19

Dog :: Dog ( char * bread ):

20

Animal (" Canis lupus familiaris "), breed ( breed ) {}

36 / 99

Переопределение методов

Базовые

сведения

Введение

Ссылки

Классы

Поля и методы

ВC++, как и в языке Java, для переопределения метода, унаследованного от базового класса, достаточно объявить и определить этот метод в производном классе.

Вкачестве примера рассмотрим базовый класс Animal:

Конструкторы

1

Создание и

2

уничтожение

объектов

3

Копирование

4

объектов

 

Одиночное

5

наследование

6

Множественное

 

наследование

7

Обобщённое

8

 

программирова-

9

ние

10

Перегрузка

11

операций

Исключения

12

 

 

13

 

14

 

15

 

16

class Animal

{

private :

char * species ; public :

Animal ( char * species ); virtual void draw ();

};

Animal :: Animal ( char * species ): species ( species ) { }

void Animal :: draw () {

 

cout << "

@ @

\n"

"

(’o ’)

\n"

" o( ___ )o

\n";

}

 

37 / 99