Скачать презентацию Лекция 3 по дисциплине Объектно-ориентированное программирование на Скачать презентацию Лекция 3 по дисциплине Объектно-ориентированное программирование на

lk_oop-c_3-11.ppt

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

Лекция № 3 по дисциплине «Объектно-ориентированное программирование» на тему: Константные объекты и функции. Дружественные Лекция № 3 по дисциплине «Объектно-ориентированное программирование» на тему: Константные объекты и функции. Дружественные функции и классы

Доступ к элементам класса Ключевые слова public и private называются спецификаторами доступа к элементам Доступ к элементам класса Ключевые слова public и private называются спецификаторами доступа к элементам класса. Инкапсуляция в ООП – это сокрытие деталей реализации класса. Инкапсуляция - возможность изолирования данных и функций от остальной части программы. Внутренний механизм класса получается защищенным Данные обычно скрыты, а функции открыты

Интерфейс и реализация класса Объявление класса называют интерфейсом класса, а определения членов-функций – его Интерфейс и реализация класса Объявление класса называют интерфейсом класса, а определения членов-функций – его реализацией Члены-данные класса и члены-функции принадлежат к области действия класса. Внутри области действия класса элементы класса допускают обращение просто по имени. Вне области действия класса на элементы класса можно ссылаться через имя объекта, ссылку или указатель на объект

Область действия функции Переменные, объявленные в члене-функции, имеют область действия функции – они известны Область действия функции Переменные, объявленные в члене-функции, имеют область действия функции – они известны только в этой функции. Если в члене-функции определена переменная с тем же именем, что и переменная с областью действия класса, то последняя будет скрыта первой внутри области действия функции. Доступ к скрытой переменной можно получить при помощи операции разрешения области действия : :

Пример доступа к элементам класса int main(){ Time t; Time *tptr=&t; // указатель на Пример доступа к элементам класса int main(){ Time t; Time *tptr=&t; // указатель на объект t. Time &tref=t; // ссылка на объект t t. day=12; t. print(); tref. day=17; tref. print(); tptr->day=25; tptr->print(); return 0; }

Отделение интерфейса от реализации Отделение интерфейса класса от реализации – основополагающий принцип ООП. Объявление Отделение интерфейса от реализации Отделение интерфейса класса от реализации – основополагающий принцип ООП. Объявление класса нужно помещать в заголовочный файл. Клиент, желающий использовать этот класс, должен включать этот файл директивой include. Это – интерфейс класса Определения членов-функций нужно помещать в отдельный исходный файл с тем же именем, что и заголовочный файл. Это – реализация класса.

Константные объекты и функции Константный объект – это объект, не модифицируемый в программе const Константные объекты и функции Константный объект – это объект, не модифицируемый в программе const Time t (1, 2, 2012); ü Вызов членов-функций от константных объектов разрешается, только если сама функция является константной Объявление константной функции: int Time: : get. Day() const {return day}; Определение с модификатором const члена-функции, которая изменяет элемент данных объекта, дает синтаксическую ошибку константная функция может быть перегружена неконстантной функцией

Пример с константными объектами и функциями #include <iostream. h> using std: : cout; class Пример с константными объектами и функциями #include using std: : cout; class Time{ private: int day, month, year; public: Time(int=0, int=0); void set. Time(int, int); void set. Day(int); int get. Day() const; void print(); };

Продолжение примера Time: : Time(int d, int m, int y) { set. Time(d, m, Продолжение примера Time: : Time(int d, int m, int y) { set. Time(d, m, y); } void Time: : set. Time(int d, int m, int y) { set. Day(d); month= (m>=1 && m<13) ? m : 0; year= (y>=1900 && y<=2012) ? y : 0; } void Time: : set. Day(int d){ day= (d>=1 && d<32) ? d : 0; } int Time: : get. Day() const {return day; } void Time: : print() { cout<

Тестирующая функция int main(){ Time t 1(1, 2, 2012); const Time t 2(8, 3, Тестирующая функция int main(){ Time t 1(1, 2, 2012); const Time t 2(8, 3, 2012); t 1. set. Day(7); t 2. set. Day(12); int n=t 1. get. Day(); int m=t 2. get. Day(); return 0; }

Вложенные классы Вложенный класс - это класс, включающий в качестве элементов объекты других классов Вложенные классы Вложенный класс - это класс, включающий в качестве элементов объекты других классов Пример: class Clock { private: char* name; Time t; … }; Пример конструктора класса Clock: : Clock( char *n, int d, int m, int y): Time(d, m, y) {…}

Дружественные структуры Разновидности: дружественные функции; дружественные классы; дружественные члены-функции. ü Дружественные функции имеют доступ Дружественные структуры Разновидности: дружественные функции; дружественные классы; дружественные члены-функции. ü Дружественные функции имеют доступ ко всем элементам класса, в том числе закрытым, но сами членами класса не являются

Пример дружественной функции #include <iostream> class Time{ private: int day, month, year; public: Time() Пример дружественной функции #include class Time{ private: int day, month, year; public: Time() {day=1; month=1; year=1970; } void print() const { cout<

Окончание примера bool w_year(Time &t){ return !(t. year%4); } int main() { Time t Окончание примера bool w_year(Time &t){ return !(t. year%4); } int main() { Time t 1; bool w=w_year(t 1); cout<

Пример функции, дружественной двум классам class B; class A { friend void f (A, Пример функции, дружественной двум классам class B; class A { friend void f (A, B); }; class B { friend void f (A, B); }; void f(A a, B b) { }

ü Перегруженные функции можно также объявлять дружественными Чтобы объявить дружественным целый класс, нужно внутри ü Перегруженные функции можно также объявлять дружественными Чтобы объявить дружественным целый класс, нужно внутри описания класса Class. One поместить объявление friend class Class. Two; Ø Понятие дружественности не симметрично.