

Как запомнить многие правила прг-ния?
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