Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

[ООП] Лекция 1

.pdf
Скачиваний:
13
Добавлен:
21.03.2016
Размер:
359.16 Кб
Скачать

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

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

Выделение класса как некоторого понятия, охватывающего целый ряд различных объектов, также является абстракцией.

Иерархия наследования

Предок - надкласс или суперкласс Потомок - подкласс или субкласс

Объект

Животное

Техн. устройство

 

Млекопитающее

Электронное устр.

Трансп. средство

 

Человек Монитор Автомобиль

Студент

Полиморфизм

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

Возможность переопределения методов есть реализация полиморфизма.

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

Поиск метода, который вызывается в ответ на определенное сообщение, начинается с методов, принадлежащих классу получателя.

Поиск:

для методов класса -> найден ? да -> выполн. нет->

->для родительского класса->найден? да-> выполн. ( и далее вверх по цепочке) нет->

-> сообщение об ошибке

Если выше в иерархии классов существуют методы с тем же именем, что и текущий, то говорят, что данный метод переопределяет наследуемое поведение.

Абстракция

• С технической (.) зрения

Интерфейс (абстрагированная сущность объектов) + реализация (скрыта от пользователя)

Выделение класса, как понятия

Выделение существенных свойств объекта

Описание класса

class <имя> { [private:]

<описание скрытых элементов> public:

<описание доступных элементов>

};

Элементы класса – поля и методы.

Пример

#include <iostream.h>

 

#include <string.h>

Поля

 

class student

 

{ char fam[20],name[20];

 

int age;

 

public:

Встраиваемые методы

void setdata (char *f, char *n, int a = 20)

{ age = a; strcpy(fam, f);

 

strcpy(name, n);

 

}

 

void show ()

 

{ cout << fam << ' ' << name << ' ' <<

age << endl; }

};

 

Использование

int main ()

Описание объектов

 

{student a, b ; a.setdata("Ivanov", "Boris");

b.setdata("Sokolova", "Olga", 19); a.show();

b.show();

Вызов методов

student *s = new student;

(передача сообщений)

 

s-> setdata ("Ivanova", ”Maria");

 

return 0;

 

}

Определение метода вне класса

void student :: setdata (char *f, char *n, int a)

{ age = a; strcpy(fam, f); strcpy(name, n);

}

Указатель this

Метод работает с полями того объекта, для которого он вызван. Для этого передается скрытый параметр this, содержащий константный указатель на объект.

student& student :: old (student &a) { if ( age > a.age ) return *this; return a;

}

student c = a.old(b); c.show();