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

ООП / ООП / 1_oop2014_lec_201

.pdf
Скачиваний:
19
Добавлен:
18.02.2017
Размер:
10.52 Mб
Скачать

Инкапсуляция (1): использ. объекта (пример)

CPoint.h

 

 

main.cpp

#ifndef …

 

 

 

#define …

 

 

 

 

 

 

#include "CPoint.h"

class CPoint

{

 

 

private:

 

… main (…) {

int x,y,z;

 

CPOINT

 

 

 

CPoint a.

(7,8,9);

int Sum();

 

a.x = 10; //запрет доступа

public:

 

a.SetX(a.GetX()+1);

CPoint(int

_x,

a.y = 12; //запрет доступа

 

int

_y,

a.z = 14;

 

 

int

_z);

a.Sum();

//запрет доступа

void

SetX(int _x);

}

 

int

GetX(void);

 

 

};

 

 

 

 

#endif

В каждую не-static ЭФ передается указатель this на обраб. объект

61

Наследование (2)

«Они называют расширение типа наследованием“, но, вообще-то, наследство обычно переходит к потомку только тогда, когда предок умирает» (Н. Вирт)

Базовый К

предок в самом начале иерархии

 

Косвенный БК

предыдущий К в иерархии, не являющийся БК

Производный К

потомок в иерархии

 

 

Простое Н

один

БК/КБК

A

B

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

несколько БК/КБК

 

 

ПК использует:

C

не-private ЭД

некоторые не-private ЭФ (не все наследуются)

с возможностью поведения (замена тела ЭФ)

D

 

62

Наследование (2): пример

 

 

БК: A

 

 

 

ПК: B

 

 

pri

 

 

 

 

 

 

 

 

 

 

 

ЭД

 

 

 

 

 

 

x

 

 

 

time

 

 

 

 

 

A

 

 

 

 

 

 

ЭФ

SetX

 

 

 

B

 

 

 

 

 

 

 

 

 

 

B

 

GetX

 

 

 

SetT

 

 

 

 

 

 

 

 

pri

 

 

 

GetT

A

class A {

class B: public A {

protected:

protected:

int x;

int time;

public:

public:

A(int _x);

B(int _x, int _time): A(_x);

void

SetX(int);

void

SetT(int);

int

GetX(void);

int

GetT(void);

};

 

};

63

 

 

 

Полиморфизм (3)

Одно название функции множество реализаций

64

Полиморфизм (3) – виды и пример

1.Статический (см. выше)

2.Динамический виртуальные функции

Пример

Класс A – окружность, B (наследник А) – треугольник.

p – указатель на А (БК), может указывать на объекты из иерархии (выбор объекта – RunTime).

Нужно обеспечить вызов соответствующий A::draw() или B::draw(). Проблема: A* p, будет всегда вызываться A::draw()

Решение

virtual, vtable, vptr

65

Сопровождение ЖЦ объекта

66

67

68

69

Деструктор

70

Соседние файлы в папке ООП