Скачать презентацию Методы программирования Хуторова Ольга Германовна Лекция 7 Скачать презентацию Методы программирования Хуторова Ольга Германовна Лекция 7

MP_L7.ppt

  • Количество слайдов: 29

Методы программирования © Хуторова Ольга Германовна Лекция 7 Методы программирования © Хуторова Ольга Германовна Лекция 7

Темы лекции n n Абстрактные структуры данных Объектно-ориентированное программирование q Классы Темы лекции n n Абстрактные структуры данных Объектно-ориентированное программирование q Классы

Абстрактные структуры данных n n n предназначены для удобного хранения и доступа к информации. Абстрактные структуры данных n n n предназначены для удобного хранения и доступа к информации. Они предоставляют удобный интерфейс для типичных операций с хранимыми объектами, скрывая детали реализации от пользователя. это удобно и позволяет добиться большей модульности программы. Абстрактные структуры данных часто делят на две части: интерфейс, набор операций над объектами, который называют АТД(абстрактный тип данных) и реализацию.

Операции над списками n Основные q q n включение нового элемента исключение элемента вспомогательные Операции над списками n Основные q q n включение нового элемента исключение элемента вспомогательные операции: q q q определение текущего числа элементов; очистка; маркировка

Операции над деком: q q q включение элемента справа; включение элемента слева; исключение элемента Операции над деком: q q q включение элемента справа; включение элемента слева; исключение элемента справа; исключение элемента слева; определение размера; очистка.

Операции над деревом n n Вставка/удаление Обход Маркировка Поиск уровня Операции над деревом n n Вставка/удаление Обход Маркировка Поиск уровня

Функции - часть типа данных n основная идея объектноориентированного языка - объекты (переменные пользовательских Функции - часть типа данных n основная идея объектноориентированного языка - объекты (переменные пользовательских типов) сами знают, как нужно работать со своими данными. Т. е. , функции для обработки данных - часть объектов. Такие функции, принадлежащие типу данных, в объектноориентированных языках принято называть методами объекта.

Классы, данные и методы класса n Класс (class) - это тип, определяемый пользователем, включающий Классы, данные и методы класса n Класс (class) - это тип, определяемый пользователем, включающий в себя данные и функции, называемые методами или функциями-членами класса. q q Данные класса - то, что класс знает. Функции-члены (методы) класса - то, что класс делает.

Структура и класс struct Point { double x; double y; }; … void main() Структура и класс struct Point { double x; double y; }; … void main() Point My. Point; My. Point. x = 18; Point Her. Point; Her. Point. x = 30; . . . Her. Point. Print. Point(); My. Point. Print. Point(); } class Point { float x, y; void Set Point (void) ; void Print. Point (); }; … main() Point My. Point; Point Her. Point;

Обьявление класса n n n Объявление класса содержит объявление элементов данных и прототипы функций-элементов Обьявление класса n n n Объявление класса содержит объявление элементов данных и прототипы функций-элементов класса. Класс имеет столько переменных (данных), сколько необходимо. Переменные могут быть любого типа, включая другие классы, указатели на классы и указатели на динамически распределяемые объекты. Переменные объявленные внутри класса имеют область видимости класса, т. е. от точки объявления переменной до конца класса. class_name { int data_member; void show_member(int); }; // Элемент данных // Функция-элемент

Использование класса n После определения класса вы можете объявлять переменные типа этого класса (называемые Использование класса n После определения класса вы можете объявлять переменные типа этого класса (называемые объектами): class_name object_one, object_two, object_three;

Использование класса - определение #include <iostream. h> #include <string. h> class employee { public: Использование класса - определение #include #include class employee { public: char name [64]; long employee_id; float salary; void show_employee(void) { cout << "Имя: " << name << endl; cout << "Номер служащего: " << employee_id << endl; cout << "Оклад: " << salary << endl; };

Использование класса void main(void) { employee worker, boss; strcpy(worker. name, Использование класса void main(void) { employee worker, boss; strcpy(worker. name, "John Doe"); worker. employee_id = 12345; worker. salary = 25000; strcpy(boss. name, "Happy Jamsa"); boss. employee_id = 101; boss. salary = 101101. 00; worker. show_employee(); boss. show_employee(); }

ОПРЕДЕЛЕНИЕ МЕТОДОВ КЛАССА ВНЕ КЛАССА class employee { public: char name[64]; long employee_id; float ОПРЕДЕЛЕНИЕ МЕТОДОВ КЛАССА ВНЕ КЛАССА class employee { public: char name[64]; long employee_id; float salary; //Прототип функции void show_employee(void); };

ОПРЕДЕЛЕНИЕ МЕТОДОВ КЛАССА ВНЕ КЛАССА void employee: : show_employee (void) //------->Имя класса { сout ОПРЕДЕЛЕНИЕ МЕТОДОВ КЛАССА ВНЕ КЛАССА void employee: : show_employee (void) //------->Имя класса { сout << "Имя: " << name << endl; cout << "Номер служащего: " << employee_id << endl; cout << "Оклад: " << salary << endl; };

Функция конструктора n n Каждое объявление класса должно включать прототип функции конструктора. Имя функции Функция конструктора n n Каждое объявление класса должно включать прототип функции конструктора. Имя функции конструктора должно совпадать с именем класса, а после него должны следовать круглые скобки (). class Rectangle { public: Rectangle(); // Конструктор. . . private: . . . }; n n Функция конструктора должна иметь тип void, но не нужно это указывать. Функция конструктора должна располагаться под ключевым словом public.

Функция деструктора n n n Имя функции деструктора должно совпадать с именем класса и Функция деструктора n n n Имя функции деструктора должно совпадать с именем класса и ему должен предшествовать символ ~. Функция деструктора не имеет никаких параметров Функция деструктора должна иметь тип void, но не нужно это указывать. public: Rectangle(); // Конструктор. . . ~Rectangle(); // Деструктор

Определение функций-членов класса public: Point () // Конструктор { x=1*rand()/RAND_MAX; y=1*rand()/RAND_MAX; }; Определение функций-членов класса public: Point () // Конструктор { x=1*rand()/RAND_MAX; y=1*rand()/RAND_MAX; };

Обьявление класса class Point { float x, y; public: Point () ; // Конструктор Обьявление класса class Point { float x, y; public: Point () ; // Конструктор void Set Point (void) ; void Get. X (void) ; ~ Point () ; // Деструктор private: void Calculate. Distance(void); };

Определение функций-членов класса void Print. Point() {cout << Определение функций-членов класса void Print. Point() {cout << "(" <

Определение функций-членов класса class FUNCTION { double coeff 1, coeff 2; // private fields Определение функций-членов класса class FUNCTION { double coeff 1, coeff 2; // private fields - coefficients public: // Inline member functions for setting coefficients void set(double a) { coeff 1 = a; coeff 2 = 0; } void set(double a, double b) { coeff 1 = a; coeff 2 = b; } // function declaration for calcullating ax+b double f(double x); };

Управление доступом к классу n Для ограничения уровня доступа к данным и функциямчленам класса Управление доступом к классу n Для ограничения уровня доступа к данным и функциямчленам класса в С++ существуют три ключевых слова, задающие разделы доступа в классе: q q q n private: (частный), protected: (защищенный , public: (общедоступный) Если ни одно из ключевых слов не использовалось, то все объявления в классе считаются частными. Разделы с разными привилегиями доступа могут появлятся в любом порядке и в любом количестве.

Управление доступом к классу class Example { int x 1; // частные по умолчанию Управление доступом к классу class Example { int x 1; // частные по умолчанию int f 1(void); protected: int x 2; // защищенные int f 2(void); private: int x 3; // опять частные int f 3(void); public: int x 4; // общедоступные inе f 4(void); };

Частные члены класса n Частные члены класса имеют наиболее ограниченный доступ. К частным членам Частные члены класса n Частные члены класса имеют наиболее ограниченный доступ. К частным членам класса имеют доступ только функциичлены данного класса или классы и функции объявленные как дружественные (friend) к данному классу,

Частные члены класса class TPrivate. Class { int value; int Get. Value(void); }; int Частные члены класса class TPrivate. Class { int value; int Get. Value(void); }; int TPrivate. Class: : Get. Value(void) { return value; //доступ разрешен } void main(void) { TPrivate. Class cl; //создание объекта int i = cl. value; //ошибка! Нет доступа i = cl. Get. Value(); }

Общедоступные члены класса n Доступ к общедоступным членам класса разрешен функциям-членам самого класса, производных Общедоступные члены класса n Доступ к общедоступным членам класса разрешен функциям-членам самого класса, производных классов и обычным пользователям класса.

Друзья классов n friend С++ позволяет классу объявлять друзей (friends) - функции и классы, Друзья классов n friend С++ позволяет классу объявлять друзей (friends) - функции и классы, у которых есть полный доступ к начинке класса (такой же доступ, как у его собственных функций).

Определение функций-членов класса n Обычно описания классов включают в заголовочные файлы (*. H), а Определение функций-членов класса n Обычно описания классов включают в заголовочные файлы (*. H), а реализацию функций-членов классов - в файлы *. CPP.

Список литературы n n Х. Дейтел, П. Дейтел Как программировать на С++ Бьярн Страустрап, Список литературы n n Х. Дейтел, П. Дейтел Как программировать на С++ Бьярн Страустрап, Введение в язык С++ Джефф Элджер C++ Р. Седжвик Фундаментальные алгоритмы на C++. М. , Изд-во МЭИ, 1997.