
- •1. Понятие 00п. Причины появления 00п.
- •2. Инкапсуляция св-в объекта
- •3. Насл-е св-в
- •4. Полиморфизм поведенческих св-в объектов
- •5. Роль типов даных в яп
- •6. Этапы 00п.
- •8. Заголовочные файлы.
- •10. Константы, парамы по умолчанию.
- •11. Ссылки.
- •12. Перегрузка функций.
- •13. Классы и объекты.
- •14. Члены класса.
- •15. 0Писание класов.
- •16. Конст-ры, деструкторы.
- •17. Конст-р копирования, Конст-р присваивания.
- •18. Друзья класса.
- •19. 0Бъекты с автоматически распределяемой памятью.
- •20. 0Бъекты с динамически распределяемой памятью
- •21. Производные классы: одиночное насл-е.
- •22. Модификаторы доступа.
- •23. Переопределение функций в производном класе. Вирт-ые функции.
- •24. 0Ператор разрешения контекста.
- •25. Приведение типов объектов.
- •26. Абстр-ые классы. Чисто вирт-ые функции.
- •27. Множвеное насл-е. Сравнение множвеного насл-я с одиночным.
- •28. "Правильное" множвеное насл-е. Понятие интерфейса.
- •29. Парамизованые классы.
- •30. Парамизованые функции.
- •31. Перегрузка операций. Перегрузка унарных операторов.
- •32. Перегрузка операций. Перегрузка бинарных операторов.
- •33. Исключения и их обработка.
- •34. 0Бщая характеристика стандартной библиотеки шаблонов.
- •35. Ввод-вывод с исп-нием потоков stl.
- •46. Классы Control, ScrollableControl, ContainerControl.
- •47. Классы WinForms Application, Screen.
- •48. Классы-контейнеры List, ArrayList.
- •49. Классы Pen, Brush, Font, Graphics.
- •50. Класс Form.
- •51. Классы WinForms для реализации кнопок.
- •52. Классы WinForms для реализации строк редактирования.
- •53. Классы WinForms для реализации списков и выпадающих списков.
- •54. Классы WinForms для реализации меню и инструментальных панелей
- •55. Классы WinForms для реализации контейнеров управляющих элементов.
- •56. Методика работы с диалоговыми окнами.
- •57. Сериализация, десериализация.
- •58.Разработка компонентов.
18. Друзья класса.
Класс может предоставлять особые привилегии определеным внеш функциям или функциям-членам другого класса. Эти функции получили названия друж-веных. Если функция или класс объявлены как друж-веные даному классу, то такие функции или функции-члены такого класса могут осуществлять непосредственый доступ ко всем полям класса, для кот они друж-вены. Друж-веные функции и классы могут осуществлять прямой доступ к закрытым полям класса без использования функций-членов этого класса. Ключевое слово friend - спецификатор функции, кот дает функции - не члену класса доступ к скрытым членам класса. 0н используется для того, чтобы выйти за строгие рамки типизации и сокрытия даных в C++. Причины их использования: 1)некот функции нуждаются в привилегированом доступе более чем к одному классу; 2)friend-функция передает все парамы через список парамов, и значение каждого из них подчинено преобразованию, совместимому с назначением. Такие преобразования применяются к явно переданым аргументам-класам и поэтому особено полезны в случаях перегрузки оператора. 0бъявление friend функции должно появляться внутри объявления класса, которому она друж-вена. Имени функции предшествует ключевое слово friend, и ее объявление может находится как в public так и в private части класса, что не повлияет на значение. Функция-член одного класса может быть friend-функцией другого класса. Это происходит тогда, когда функция-член объявлена в friend класе с исп-нием оператора разрешения контекста для определения имени функции друж-веного класса. Если все функции-члены одного класса явл friend-функциями другого класса, то это можно определить записью: friend class имя класса; class tl {friend void a(); int b();}; // friend-функция и функция-член. class t2 {friend int tl::b();};// функ-член класса tl имеет доступ ко всем скрытым полям класса t2. class t3 {friend class tl; }; //все функции-члены класса tl имеют доступ ко
Friend-функции можно расматривать как часть общего интерфейса класса. Существует ряд ситуаций, в которых они могут быть альтернативой функциям-членам. Исп-ние friend-функций спорно, потому что они нарушают инкапсуляцию, окружающую private члены класов. Парадигма 00П утверждает, что объекты (в C++ они - переменые класса) доступны через их public члены. Только функции-члены должны иметь доступ к скрытой реализации. Это ясный и строгий принцип проектирования. Friend-функция находится на самой его границе, т. к. имеет доступ к private членам, сама не являясь функцией-членом. С ее помощью можно организовать быстрый код для доступа к подробностям реализации класса.
19. 0Бъекты с автоматически распределяемой памятью.
В этом случае объявление объекта синхронизируется с его созданием и имеет синтаксис:
ИмяКласа Идентификатор0бъекта(арг-ты); Здесь арг-ты должны соответствовать одному из конст-ров класса. Если они опущены (возможно, вместе со скобками), то используется конст-р по умолчанию. В момент объявления срабатывает соответствующий конст-р. Для доступа к методам класса: Идентификатор0бъекта. ИмяПеременой. Синтаксис вызова метода класса следующий: Идентификатор0бъекта. ИмяМетода (Арг-ты). Деструктор класса выполняется автоматически при выходе автоматической объектной переменой из области видимости. Пример: for(int i=0; i<30; i++){intarray a(1000000), b(l); a=b; }; Здесь оператор присваивания просто копирует даные из одного объекта в др, в том числе и указатель на масив fitems. В рез-те работы этого фрагмента кода произойдет утечка памяти размеров примерно 120Мb (на 32-разрядных сисмах). Для исключения такой ситуации необходимо использовать конст-р присваивания.