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

ООП / ООП / 1_oop2014_lec_201

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

Как запомнить многие правила прг-ния?

COMPILE

CML

CAMEL

Смотреть глазами компилятора

51

https://www.linkedin.com/today/post/article/20140617174800-4085375-are-you-a-dog-or-a-camel-when-it-comes-to-learning

Переход от переменной типа struct к class

1.Процессор работает с функциями без привязки к переменной ("z1.")

2.Решение: тайно передает в функцию this адрес переменной &z1.

sA* p = &z1;

z1 . SetAC(5, 'R'); // адрес &z1

p -> SetAC(5, 'R'); // сразу p

52

 

Класс, объект и 3 концепции

Класс

тип данных с набором полей (ЭД) и методов (ЭФ) для их

 

обработки

Объект

переменная с типом данных "класс"

Инкапсуляция (1) заключение набора ЭД и ЭФ в защитную "капсулу" класса + разделение прав доступа к ним

Наследование (2) создание нового класса на основе существующих (1+) и получение иерархии классов

Полиморфизм (3) выбор подходящей функции из их семейства с одинаковым именем:

перегруженные функции;

виртуальные функции

53

 

Класс и объект

Класс

тип данных с набором полей (ЭД) и методов (ЭФ) для их

 

обработки

Объект

переменная с типом данных "класс"

Класс

(для )

Объекты

ОЗУ

54

Перегрузка функций

ПФ 1+ функций с ≡ именами и ≠ списками аргументов

Объявления:

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

void f(int);

f(5);

int

f(int);

f((int)5);

int

f(long);

 

int

f(int, char);

int intd = 3;

 

 

long longd = 5;

f(intd);

f(longd); f(11, 'e');

из текста C++ невозможно понять ТВЗ

если из аргумента-константы невозможно однозначно понять его тип, -> ошибка "ambiguity" – нужно явно указать тип.

решение о выборе конкретной ПФ принимается статически

55

Подпишите Группу ФИО и решите задачу

7 минут

"Дана строка"

Постройте кол-во вхождений символов.

_ *

Д *

а ***

к * н * о * р * с * т *

56

7 минут

Разбор задачи

"Дана строка"

Постройте кол-во вхождений символов.

_ *

Д *

а ***

к * н * о * р * с * т *

57

Инкапсуляция(1)

Уровни доступа для: struct

class ИмяКласса

{ private: ЭФ класса + друзей

//ЭД, ЭФ

protected: … + наследников класса

//ЭД, ЭФ

public: … + всех, кто видит объект этого класса

//ЭД, ЭФ

};

Капсула

СКУД (access denied)

58

Инкапсуляция (1): диаграмма класса (UML)

+

59

Инкапсуляция (1): код класса (пример)

CPoint.h

 

CPoint.cpp

#ifndef …

#include "CPoint.h"

#define …

 

 

 

 

int

CPoint::Sum()

class CPoint {

{ return x+y+z; }

private:

 

 

int x,y;

 

CPoint::CPoint(int _x,

int Sum();

int _y, int _z)

public:

{ x = _x; y = _y; z = _z; }

int z;

 

 

CPoint(int _x,

void CPoint::SetX(int _x)

 

int _y,

{ x = _x; }

 

int _z);

 

 

void

SetX(int _x);

int

CPoint::GetX(void)

int

GetX(void);

{ _x = x; }

};

 

 

 

#endif

60

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