- •1. Комментарии
- •2. Константы
- •3. Встраиваемые функции Встраиваемые функции
- •4. Объявление структур, объединений и перечислений
- •5. Объявление переменных
- •5. Ссылки Что такое ссылка и что с ней можно делать
- •Ссылку можно рассматривать как еще одно имя объекта. В основном ссылки используются для задания параметров и возвращаемых функциями значений, а также для перегрузки операций.
- •6. Использование спецификатора void
- •7. Преобразование стандартных типов данных.
- •8. Новые операции new, delete, операция расширения области видимости
- •1. Операция new
- •2. Операция delete
- •3. Операция :: области видимости
- •9. Объявление функций. Аргументы по умолчанию
- •10. Перегрузка функций
- •Когда использовать перегрузку
- •Новые возможности по сравнению с Си
- •Объектно-ориентированные особенности языка
- •Две роли классов
- •Поля класса
- •Конструкторы класса
- •13. Перегрузка операций
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •14. Дружественные функции
- •15. Сходства и различия классов, структур и объединений.
- •Отличия структур и объединений от классов
- •16. Классы и объекты. Определение класса и области видимости. Опережающее объявление класса
- •Две роли классов
- •Поля класса
- •17. Использование спецификатора класса памяти static. Статические компоненты класса
- •18. Константные объекты и константные методы
- •19. Неявный указатель this
- •20. Указатели на член класса
- •21. Локальные и вложенные классы
- •22. Специальный вид методов класса - конструкторы и деструкторы. Некоторые особенности конструкторов и деструкторов Конструкторы класса
- •23. Классы, содержащие объекты других классов
- •24. Создание объектов с различным временем жизни
- •25. Массивы объектов класса
- •26. Особенности копирования объектов Конструктор копирования
- •27. Заготовка класса без наследников
- •28. Пример вектора с неповерхностным копированием.
- •29. Излишнее копирование. Конструктор копии. Операции присваивания.
- •1. Излишнее копирование
- •2. Конструктор копирования
- •3. Операции присваивания
- •30. Преобразование типов. Стандартные преобразования. Явное преобразование типов
- •Преобразования указателей и ссылок
- •Явные преобразования типов
- •Неявное преобразование типа
- •31. Преобразования абстрактных типов данных (преобразование типов данных, созданных программистом)
- •32. Наследование классов
- •33. Доступ к наследуемым членам класса
- •34. Стандартные преобразования типов при наследовании
- •35. Инициализация объекта порожденного класса. Конструктор копии. Операция присваивания.
- •3. Операции присваивания
- •37. Виртуальные функции. Объявления виртуальных функций. Чисто виртуальные функции
- •Методы(функции)
- •38. Таблица виртуальных функций. Случаи, когда вызов виртуальной функции не будет виртуальным. Виртуальные деструкторы
- •39. Ввод-вывод файлов. Потоки ввода-вывода. Библиотека ввода-вывода (iostream). Группы классов библиотеки ввода вывода
- •40. Краткая характеристика иерархии классов производных от conbuf.
- •Класс conbuf (constrea.H)
- •Функции-элементы
- •41. Иерархия классов производных от ios
- •42. Состояния потока. Ошибки потоков. Состояние потока
- •С каждым потоком связан набор флагов, которые управляют форматированием потока. Они представляют собой битовые маски, которые определены в классе ios как данные перечисления. Манипуляторы
- •Шаблоны и наследование. Шаблоны и конфигурация компиляторов. Достоинства и недостатки шаблонов.
- •Совместное использование шаблонов и наследования
- •Достоинства и недостатки шаблонов
- •Исключения Применение try, catch, throw
- •47. Обработка исключительных ситуаций. Обработка завершения. Обработка структурных исключений, заявление исключения, фильтрующие выражение. Исключительные ситуации
- •Обработка исключительных ситуаций
- •Обработчик завершения
- •48. Стратегии взаимодействия объектов в программе. Программа как система взаимодействующих объектов. Система объектов, управляемых сообщениями
- •1. Программа, как система взаимодействия объектов.
- •49. Элементы объектно-ориентированного анализа и объектно-ориентированного проектирования. Диаграммы классов. Отношения классов: ассоциация, наследование, агрегация, использование.
- •51. Элементы объектно-ориентированного анализа и объектно-ориентированного проектирования. Диаграммы объектов, назначения, отношения между объектами. Диаграммы объектов (object diagrams)
23. Классы, содержащие объекты других классов
Элементы - данные некоторого класса могут быть объектами других классов, содержащих свои конструкторы и деструкторы.
В объектно-ориентированной методологии известно такое понятие HASA relationship.
Инициализация элементов-объектов осуществляется через список инициализации (constructor initializer).
Часть заголовка конструктора начинающаяся двоеточием, называется списком инициализации. Он представляет собой перечисление имен объектов членов класса со списком аргументов в скобках. Отдельные члены должны быть проинициализированы следующим образом:
имя_члена (список аргументов).
Список аргументов должен соответствовать какому-нибудь из конструкторов класса к которому он принадлежит. Именно этот конструктор и будет вызываться для таких членов-объектов класса.
// класс с объектами-членами другого класса
class A {
........... public: A(int n=0) {...}; ~A() {...};
};
class B {
........... public: B(double x=0) {...}; ~B() {...};
};
class D { const A a; B b;
public: D(double x,int i); D(double x); D(); ~D();
};
// реализация
D::D(double x,int i):b(x),a(i)
{ ....... }
D::D(double x):b(x) { ....... }
D::D():b(0) { ....... }
В этом примере класс D создает два объекта классов A и B. Для инициализации a и b используется список инициализации. При использовании классов агрегатов следует учесть, что конструкторы членов-объектов класса вызываются раньше, чем для класса владельца.
Порядок вызовов конструкторов членов-класса определяется не списком инициализации, порядком объявления переменных класса.
В нашем случае D с двумя переменными первым будет вызывать конструктор объекта a.
Если конструктору члена-класса аргументы не нужны, то этот объект можно не указывать в списке инициализации. Конструктор будет вызван по умолчанию
Аргументы объектов в списке инициализации могут быть сколь угодно сложными.
Список инициализации членов является единственным способом инициализации константных объектов членов-класса, ссылок, объектов с защищенными данными.
24. Создание объектов с различным временем жизни
Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости.
Время жизни объектов определяется классом памяти.
Статические объекты создаются и инициализируются на момент запуска программы в сегменте данных и существуют до ее остановки, не меняя своего месторасположения в памяти. Конструкторы таких объектов называются цельными. Конструкторы для статических объектов могут вызываться до main(). Деструкторы вызываются по окончании программы в порядке обратном вызове конструкторов.
Автоматические объекты создаются и инициализируются в стеке в момент входа в блок и завершают свое существование при выходе из блока. Конструктор для автоматических объектов вызывается неявно при каждом определенном входе в блок или в функцию. Деструктор для каждого автоматического объекта также вызываются неявно, при выходе из блока или функции, но в порядке обратном вызову конструкторов.
В стеке могут создаваться временные объекты. Порядок вызова таких функций определяется порядком вычислений. Деструкторы для них вызываются по окончании операции, в которой потреблялись временные объекты.
Динамические данные создаются в куче. Нужно создавать с помощью new и delete. Опер. new кроме выделения памяти осуществляет вызов соответствующего конструктора, обеспечивая необходимую инициализацию объектов. delete кроме освобождения памяти вызывает деструктор, который может корректно завершить работу с объектом.
Point2D p1=new Poinr2D(5.5,10.1);
................................
delete p1;