🗊 Презентация Классы и сокрытие данных Дружественные функции

Категория: Образование
Нажмите для полного просмотра!
Классы и сокрытие данных Дружественные функции, слайд №1 Классы и сокрытие данных Дружественные функции, слайд №2 Классы и сокрытие данных Дружественные функции, слайд №3 Классы и сокрытие данных Дружественные функции, слайд №4 Классы и сокрытие данных Дружественные функции, слайд №5 Классы и сокрытие данных Дружественные функции, слайд №6 Классы и сокрытие данных Дружественные функции, слайд №7 Классы и сокрытие данных Дружественные функции, слайд №8 Классы и сокрытие данных Дружественные функции, слайд №9 Классы и сокрытие данных Дружественные функции, слайд №10 Классы и сокрытие данных Дружественные функции, слайд №11 Классы и сокрытие данных Дружественные функции, слайд №12 Классы и сокрытие данных Дружественные функции, слайд №13 Классы и сокрытие данных Дружественные функции, слайд №14 Классы и сокрытие данных Дружественные функции, слайд №15 Классы и сокрытие данных Дружественные функции, слайд №16 Классы и сокрытие данных Дружественные функции, слайд №17 Классы и сокрытие данных Дружественные функции, слайд №18 Классы и сокрытие данных Дружественные функции, слайд №19 Классы и сокрытие данных Дружественные функции, слайд №20 Классы и сокрытие данных Дружественные функции, слайд №21 Классы и сокрытие данных Дружественные функции, слайд №22 Классы и сокрытие данных Дружественные функции, слайд №23 Классы и сокрытие данных Дружественные функции, слайд №24 Классы и сокрытие данных Дружественные функции, слайд №25 Классы и сокрытие данных Дружественные функции, слайд №26 Классы и сокрытие данных Дружественные функции, слайд №27 Классы и сокрытие данных Дружественные функции, слайд №28 Классы и сокрытие данных Дружественные функции, слайд №29 Классы и сокрытие данных Дружественные функции, слайд №30 Классы и сокрытие данных Дружественные функции, слайд №31 Классы и сокрытие данных Дружественные функции, слайд №32 Классы и сокрытие данных Дружественные функции, слайд №33 Классы и сокрытие данных Дружественные функции, слайд №34 Классы и сокрытие данных Дружественные функции, слайд №35 Классы и сокрытие данных Дружественные функции, слайд №36 Классы и сокрытие данных Дружественные функции, слайд №37 Классы и сокрытие данных Дружественные функции, слайд №38 Классы и сокрытие данных Дружественные функции, слайд №39 Классы и сокрытие данных Дружественные функции, слайд №40 Классы и сокрытие данных Дружественные функции, слайд №41 Классы и сокрытие данных Дружественные функции, слайд №42

Содержание

Вы можете ознакомиться и скачать презентацию на тему Классы и сокрытие данных Дружественные функции. Доклад-сообщение содержит 42 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Классы и объекты
Описание слайда:
Классы и объекты

Слайд 2


Статические переменные внутри класса В стандарте языка С++ нет никаких ограничений по использованию статических переменных внутри классов. Однако в...
Описание слайда:
Статические переменные внутри класса В стандарте языка С++ нет никаких ограничений по использованию статических переменных внутри классов. Однако в реализации объявление статических переменных внутри классов приводит к ошибке на стадии линковки. Для предотвращения данного эффекта следует пользоваться следующей записью: #include "iostream“ using namespace std; class Cl { static int n; public: Cl() { n++; cout

Слайд 3


Массивы объектов При описании объектов при помощи классов программистом создается новый тип данных, а переменная этого типа (экземпляр) и есть...
Описание слайда:
Массивы объектов При описании объектов при помощи классов программистом создается новый тип данных, а переменная этого типа (экземпляр) и есть объект. Если рассматривать класс как новый тип данных, то в языке С++ можно создавать массивы объектов. Синтаксис – традиционен для языка С++. Если задан произвольный класс Cl, то для создания одномерного массива объектов можно воспользоваться следующей записью: class Cl { …}; void main() { Cl obj1[10]; } Данная запись относится к случаю, когда в классе описан конструктор с аргументами по умолчанию. Если в классе есть только конструкторы с аргументами и отсутствует конструктор по умолчанию, то в этом случае необходимо при описании массива явно указывать передаваемые параметры:

Слайд 4


Массивы объектов - пример #include "iostream" using namespace std; class Cl { int n; public: Cl(int k) { n = k; } void print () {cout
Описание слайда:
Массивы объектов - пример #include "iostream" using namespace std; class Cl { int n; public: Cl(int k) { n = k; } void print () {cout

Слайд 5


Указатели и ссылки на объекты void main() { Cl obj1[4] = { Cl(1), Cl(2), Cl(3), Cl(4) }; Cl* ptr; ptr = &obj1[3]; ptr->print(); }
Описание слайда:
Указатели и ссылки на объекты void main() { Cl obj1[4] = { Cl(1), Cl(2), Cl(3), Cl(4) }; Cl* ptr; ptr = &obj1[3]; ptr->print(); }

Слайд 6


Указатели и захват динамической памяти Cl* ptr; ptr = new Cl; ptr->print(); delete ptr;
Описание слайда:
Указатели и захват динамической памяти Cl* ptr; ptr = new Cl; ptr->print(); delete ptr;

Слайд 7


Ссылки на объекты Вспомним о неприятных случаях, рассмотренных на предыдущей лекции, когда деструктор содержит освобождение памяти и приходится...
Описание слайда:
Ссылки на объекты Вспомним о неприятных случаях, рассмотренных на предыдущей лекции, когда деструктор содержит освобождение памяти и приходится применять конструктор копирования. Чтобы обойти такие ситуации можно использовать ссылки на объекты. Важно: при использовании ссылок не происходит создания копии объектов, а соответственно не происходит и вызова деструктора копии!

Слайд 8


Указатель this В памяти для каждого располагаемого объекта создается специальный уникальный указатель. Этот указатель делается доступным путем...
Описание слайда:
Указатель this В памяти для каждого располагаемого объекта создается специальный уникальный указатель. Этот указатель делается доступным путем использования ключевого слова this. Правила: каждому объявляемому объекту соответствует свой скрытый this-указатель; this-указатель может быть использован только для нестатической функции; this указывает на начало своего объекта в памяти; this не надо дополнительно объявлять; this передается как скрытый аргумент во все нестатические (не имеющие спецификатора static) компоненты-функции своего объекта; указатель this – локальная переменная и не доступна за пределами объекта; обращаться к скрытому указателю можно this или *this.

Слайд 9


Указатель this - пример #include "iostream" using namespace std; class Cl { public: int n; Cl(int n) { this->n = n; } void print () {cout
Описание слайда:
Указатель this - пример #include "iostream" using namespace std; class Cl { public: int n; Cl(int n) { this->n = n; } void print () {cout

Слайд 10


Указатель this - пример #include "iostream" using namespace std; class Cl { public: int n; Cl(int n) { this->n = n; } void print () {cout
Описание слайда:
Указатель this - пример #include "iostream" using namespace std; class Cl { public: int n; Cl(int n) { this->n = n; } void print () {cout

Слайд 11


Указатель this - пример #include "iostream" using namespace std; class Cl { public: int n; Cl(int n) { this->n = n; } void print () {cout
Описание слайда:
Указатель this - пример #include "iostream" using namespace std; class Cl { public: int n; Cl(int n) { this->n = n; } void print () {cout

Слайд 12


Спецификатор const #include "iostream“ using namespace std; class cls { int n; public: void print() const // { cout
Описание слайда:
Спецификатор const #include "iostream“ using namespace std; class cls { int n; public: void print() const // { cout

Слайд 13


Статические функции #include "iostream" using namespace std; class cls { int n; public: static void Conv() { n = 0;} }; void main() { cls...
Описание слайда:
Статические функции #include "iostream" using namespace std; class cls { int n; public: static void Conv() { n = 0;} }; void main() { cls obj; obj.Conv(); } // Так нельзя!!!

Слайд 14


Вложенные классы char c; class cls { char c; class XXX { char c; void func(char Ch) { ::c = cls::c = c =Ch; } };
Описание слайда:
Вложенные классы char c; class cls { char c; class XXX { char c; void func(char Ch) { ::c = cls::c = c =Ch; } };

Слайд 15


Вложенные классы еще void func() { class local { . . . } x; . . . // все что угодно }; local y; // запрещено, так как класс описан в контексте...
Описание слайда:
Вложенные классы еще void func() { class local { . . . } x; . . . // все что угодно }; local y; // запрещено, так как класс описан в контексте функции func

Слайд 16


Другие способы описания объектов Класс - class Структура - structure Объединение (смесь) - union
Описание слайда:
Другие способы описания объектов Класс - class Структура - structure Объединение (смесь) - union

Слайд 17


Объединение - пример
Описание слайда:
Объединение - пример

Слайд 18


Объединение – пример 2
Описание слайда:
Объединение – пример 2

Слайд 19


Объединение - ограничения
Описание слайда:
Объединение - ограничения

Слайд 20


Инкапсуляция – сокрытие данных Инкапсуляция – это механизм языка программирования, который позволяет объединять данные и код, взаимодействующий с...
Описание слайда:
Инкапсуляция – сокрытие данных Инкапсуляция – это механизм языка программирования, который позволяет объединять данные и код, взаимодействующий с этими данными. Инкапсуляция – это способность скрывать внутренние детали при предоставлении открытого интерфейса к определяемому пользователем типу данных. Сокрытие данных – важный компонент ООП. Он позволяет создавать легче отлаживаемый и сопровождаемый код, потому что ошибки и модификации локализованы в нем. В языке С++ для обеспечения инкапсуляции используются объявления класса или структуры, в сочетании с ключевыми словами, определяющими модификатор доступа (private, protected и public). Ограничения доступа могут быть установлены как на уровне целых классов, так и на уровне отдельных компонент классов. По правилам хорошего тона члены-данные должны помещаться в private часть объявления класса, и доступ к ним должен осуществляться с использованием функций-членов класса. Такая дисциплина доступа гарантирует, что пользователь не сможет вмешаться или неправильно использовать реализованный АТД (абстрактный тип данных).

Слайд 21


Атрибут доступа Каждая функция и элемент данных, описанные внутри класса, имеют атрибут доступа: public (открытый) – доступ к элементам класса может...
Описание слайда:
Атрибут доступа Каждая функция и элемент данных, описанные внутри класса, имеют атрибут доступа: public (открытый) – доступ к элементам класса может быть осуществлен как из самого класса, так и извне класса private (закрытый) – доступ к элементам класса может быть осуществлен только из функций самого класса. protected (защищенный) – имеет смысл при наследовании классов и будет рассмотрен позже

Слайд 22


Инкапсуляция – идея class My_cl { public: void Set(int n); . . . protected : . . . private: . . . }; // public – виден и доступен всем // protected –...
Описание слайда:
Инкапсуляция – идея class My_cl { public: void Set(int n); . . . protected : . . . private: . . . }; // public – виден и доступен всем // protected – виден и доступен только из базового класса и из // производных классов // private – виден и доступен только из базового класса Где либо в программе: My_cl clMy; clMy.Set(a);

Слайд 23


Инкапсуляция - пример class My_str { public: void Get(int n); int Var1; . . . protected : int Var2; . . . private: int Var3; . . . }; Где либо в...
Описание слайда:
Инкапсуляция - пример class My_str { public: void Get(int n); int Var1; . . . protected : int Var2; . . . private: int Var3; . . . }; Где либо в программе: My_str::Get(a);

Слайд 24


Дружественные функции – общие положения При написании программ часто встречается ситуация, при которой необходимо иметь доступ к закрытым компонентам...
Описание слайда:
Дружественные функции – общие положения При написании программ часто встречается ситуация, при которой необходимо иметь доступ к закрытым компонентам классов. При использовании обычных внешних функций это невозможно – возникают ошибки компиляции. Для решения данной задачи в С++ применяются так называемые дружественные функции. Для этого используется спецификатор friend. Отмеченная им функция: не является методом-функцией этого класса; имеет доступ ко всем компонентам этого класса (даже private). Прототипы таких функций задаются в теле описания класса. Само тело такой функции может быть описано где угодно – и в классе, и за его пределами. Лучше производить определение дружественной функции за пределами класса, подчеркивая тем самым тот факт, что функция не является компонентом класса.

Слайд 25


Дружественная функция (пример) #include using namespace std; class C { int n; public: C(int n) {this->n = n; }; // конструктор void print() { cout
Описание слайда:
Дружественная функция (пример) #include using namespace std; class C { int n; public: C(int n) {this->n = n; }; // конструктор void print() { cout

Слайд 26


Дружественная функция – объявление и вызов Для того, чтобы дружественная функция осуществляла доступ к компонентам класса необходимо в качестве...
Описание слайда:
Дружественная функция – объявление и вызов Для того, чтобы дружественная функция осуществляла доступ к компонентам класса необходимо в качестве аргумента передавать либо указатель либо ссылку на объект. Объявлять прототип дружественной функции можно в любом месте описания класса. Атрибуты доступа для дружественных функций не играют роли. Так как дружественная функция не является компонентом класса ее нельзя вызвать с использованием имени объекта или указателя на него. Вызов осуществляется обычным способом. В С++ одна функция не может быть компонентой двух различных классов. Иногда возникает необходимость организации доступа к локальным данным нескольких классов из одной функции. Это еще одна (если не главная!) причина для использования дружественных функций.

Слайд 27


Дружественная функция (пример 2) #include class B; // ссылка вперед – некоторый // аналог прототипа функции class C { int k; public: C(int n) { k =...
Описание слайда:
Дружественная функция (пример 2) #include class B; // ссылка вперед – некоторый // аналог прототипа функции class C { int k; public: C(int n) { k = n; }; // конструктор friend char* equal (const C&, const B&); }; class B { int k; public: B(int n) { k = n*n; }; // конструктор friend char * equal (const C&, const B&); };

Слайд 28


Спецификатор friend классов Дружественные функции могут быть перегружены. Любой метод одного класса может быть дружественным по отношению к другому...
Описание слайда:
Спецификатор friend классов Дружественные функции могут быть перегружены. Любой метод одного класса может быть дружественным по отношению к другому классу. В этом случае для доступа к компонентам классов в качестве аргументов необходимо лишь передать ссылки или указатели на объекты, для которой функция является дружественной. Предположим, что для предыдущего примера функция equal является методом класса С и дружественной по отношению к классу B. Тогда описания этой функции будут выглядеть так: В классе С: char* equal (const B&); В классе B: friend char* C::equal (const B&);

Слайд 29


Спецификатор friend классов #include class A { int i; public: friend class B; A( ) : i(1) { }; // конструктор ~A( ) { }; void f1_A(const B&); };...
Описание слайда:
Спецификатор friend классов #include class A { int i; public: friend class B; A( ) : i(1) { }; // конструктор ~A( ) { }; void f1_A(const B&); }; class B { int j; public: friend class A; B( ) : j(2) { }; // конструктор ~B( ) { }; void f1_B(const A& a) { cout

Слайд 30


Спецификатор friend классов - свойства Основные свойства и правила использования спецификации friend. friend-функции не являются компонентами класса,...
Описание слайда:
Спецификатор friend классов - свойства Основные свойства и правила использования спецификации friend. friend-функции не являются компонентами класса, но имеет доступ ко всем его компонентам; friend-функции не имеют доступа к указателю this; friend-функции не наследуются в производных классах; отношение friend не является ни симметричным, ни транзитивным: A друг B не значит, что B друг A! Если A друг B, а B друг C, то это не значит, что A друг C! друзьями класса можно определить перегруженные функции. Каждая перегруженная функция, используемая как friend для некоторого класса, должна быть явно объявлена в классе со спецификатором friend.

Слайд 31


Тесты … Вопрос: Что будет выведено на экран в результате выполнения программы?
Описание слайда:
Тесты … Вопрос: Что будет выведено на экран в результате выполнения программы?

Слайд 32


Тесты … Вопрос: Что будет выведено на экран в результате выполнения программы?
Описание слайда:
Тесты … Вопрос: Что будет выведено на экран в результате выполнения программы?

Слайд 33


Тесты … Вопрос: Чем классы отличаются от структур?
Описание слайда:
Тесты … Вопрос: Чем классы отличаются от структур?

Слайд 34


Тесты … Вопрос: Чем классы отличаются от структур?
Описание слайда:
Тесты … Вопрос: Чем классы отличаются от структур?

Слайд 35


Тесты … Вопрос: Корректен ли код с точки зрения выделения ресурсов?
Описание слайда:
Тесты … Вопрос: Корректен ли код с точки зрения выделения ресурсов?

Слайд 36


Тесты … Вопрос: Корректен ли код с точки зрения выделения ресурсов?
Описание слайда:
Тесты … Вопрос: Корректен ли код с точки зрения выделения ресурсов?

Слайд 37


Тесты … Вопрос: Скомпилируется ли следующий код:
Описание слайда:
Тесты … Вопрос: Скомпилируется ли следующий код:

Слайд 38


Тесты … Вопрос: Скомпилируется ли следующий код:
Описание слайда:
Тесты … Вопрос: Скомпилируется ли следующий код:

Слайд 39


Тесты … Вопрос: Что выведет следующая программа:
Описание слайда:
Тесты … Вопрос: Что выведет следующая программа:

Слайд 40


Тесты … Вопрос: Что выведет следующая программа:
Описание слайда:
Тесты … Вопрос: Что выведет следующая программа:

Слайд 41


Тесты … Вопрос: Какое утверждение о следующем коде верно:
Описание слайда:
Тесты … Вопрос: Какое утверждение о следующем коде верно:

Слайд 42


Тесты … Вопрос: Какое утверждение о следующем коде верно:
Описание слайда:
Тесты … Вопрос: Какое утверждение о следующем коде верно:



Похожие презентации
Mypresentation.ru
Загрузить презентацию