- •1. Парадигмы программирования, основные направления в программировании.
- •2.Возникновение ооп
- •Базовые принципы и конструкции ооп
- •4. Особенности процедурного и объектно-ориентированного программирования
- •Основные положения объектной модели и ее преимущества и недостатки
- •Абстрагирование. Модульность. Иерархия. Типизация
- •Максимизация эффективности использования памяти компьютера.
- •11. Использование new и delete для реализации динамических массивов (одномерных и двумерных). Инициализация динамически выделенной памяти.
- •12. Базовые конструкции объектно-ориентированных программ: классы и объекты.
- •13. Концепция, определение, реализация класса. Принцип инкапсуляции. Атрибуты доступа к содержимому класса.
- •14. Инициализация и разрушение объекта. Способы доступа к содержимому класса. Поля и методы класса
- •15. Конструкторы и деструкторы класса. Конструктор по умолчанию
- •32. Сравнение классов и структур. Сравнение классов и объединений
- •18. Организация внешнего доступа к локальным компонентам класса. Встраиваемые методы класса. Использование встраиваемых методов в определении класса.
- •19. Инициализация массивов объектов. Указатель this. Указатели на объекты.
- •Int get_i() {return I; }
- •Int get_h() {return h; }
- •Int main()
- •20. Динамическая и статическая инициализация переменных и объектов.
- •42. Дружественные функции класса. Перегрузка функций и методов. Особенности перегрузки операторов как метода класса и как дружественной функции.
- •24. Создание, особенности использование конструктора копии при передаче объекта в качестве параметра функции, возврате объекта из функции и инициализации объектов.
- •25. Локальные static-переменные. Глобальные static-переменные.
- •27. Использование ключевого слова const при создании переменной и объекта класса. . Константные аргументы и возвращаемые значения методов класса. Вложенные классы.
- •28. Перегрузка операторов для пользовательских типов данных. Перегрузка унарных операторов. Перегрузка бинарных операторов. Особенности использования ключевого слова operator.
- •29. Аргументы перегружаемого оператора. Значения, возвращаемые перегружаемым оператором. Временные безымянные объекты.
- •30. Перегрузка постфиксных операторов. Перегрузка оператора ()
- •Int &operator[](int I) {return a[I];}
- •33. Перегрузка оператора *. Перегрузка оператора присваивания
- •34. Особенности преобразования типов данных. Явные преобразования. Преобразования типов, определенных в программе. Особенности преобразования основных типов в основные типы.
- •35. Особенности использования указателей и ссылок. Ссылки как параметры методов и как возвращаемые значения. Статические и динамические объекты.
- •37. Наследование, базовый и производный классы. Иерархия классов
- •38. Определение производного класса, доступ к содержимому базового класса. Использование конструкторов, полей и методов базового класса.
- •39. Спецификатор доступа protected, недостатки использования спецификатора protected.
- •40. Неизменность базового класса. Конструкторы производного класса. Переопределение методов базового класса.
- •42. Общее, частное и защищенное наследование. Комбинации атрибутов доступа при наследовании. Выбор атрибута доступа при наследовании. Уровни наследования. Множественное наследование.
- •43. Методы классов и множественное наследование. Неопределенности при множественном наследовании и способы её разрешения.
- •44. Конструкторы при множественном наследовании. Конструкторы без аргументов и конструкторы с аргументами при множественном наследовании.
- •45. Связь включения. Классы в классах. Композиция и наследование. Роль наследования при разработке программ.
- •46.Указатели и ссылки на производные типы. Понятие и сравнение раннего связывания с поздним.
- •47. Множественное наследование и виртуальное наследование базовых классов. Использование виртуального механизма для реализации принципа полиморфизма.
- •48. Виртуальные методы класса и механизм их использования. Чисто виртуальные функции и абстрактные базовые классы.
- •49. Виртуальный деструктор. Абстрактные классы их назначение и свойства
- •50. Наследование виртуальных методов. Необходимость применения виртуальных функции. Полиморфизм и пуризм.
- •51. Понятие параметризированных функций. Параметризированные функции с двумя и более обобщенными типами. Перегрузка параметризированной функции.
- •126. Использование стандартных параметров в параметризированных функциях и методах. Особенности использования параметризированных функций и методов.
- •53. Параметризированные классы, методы, их свойства. Явно задаваемые специализации параметризированных классов
- •54. Совместное использование параметризации и принципов наследования.
- •55. Организация внешнего доступа к компонентам параметризированных классов. Параметризированные классы и статические элементы.
- •56. Использование в параметризированных классах аргументов, не являющихся типами. Использование в параметризированных классах аргументов по умолчанию.
- •133. Шаблоны класса и дружественные функции класса. Спецификатор register.
- •61. Причины использования многофайловых программ. Библиотеки классов. Реализация библиотек классов.
- •62. Создание многофайловой программы. Директории в многофайловой программе.
14. Инициализация и разрушение объекта. Способы доступа к содержимому класса. Поля и методы класса
Объект объявляется следующим образом:
имя_класса имя_объекта;
Инициализация открытых объектов происходит напрямую, закрытых объектов с помощью конструктора. Конструктор — это особый тип метода класса, который автоматически вызывается при создании объекта этого же класса.
Деструктор — это функция, которая вызывается при разрушении объекта.
Во многих случаях при разрушении объекту необходимо выполнить некоторое действие или даже некоторую последовательность действий. Локальные объекты создаются при входе в блок, в котором они определены, и разрушаются при выходе из него. Глобальные объекты разрушаются при завершении программы. Имя деструктора совпадает с именем конструктора, но предваряется символом "~" Подобно конструкторам деструкторы не возвращают значений, а следовательно, в их объявлениях отсутствует тип возвращаемого значения.
Доступ к элементам или полям класса можно осуществить тремя способами:
- имя представителя класса.имя элемента;
- имя класса: :имя элемента;
- указатель на представитель класса->имя элемента.
(из методички Шилдта) В классе данные объявляются в виде переменных, а код оформляется в виде функций. Функции и переменные, составляющие класс, называются его членами. Таким образом, переменная, объявленная в классе, называется членом данных, а функция, объявленная в классе, называется функцией-членом.
(из методички с лабораторными) Данные, объявленные внутри класса, называются компонентами-данными, а функции – компонентами-функциями или методами.
15. Конструкторы и деструкторы класса. Конструктор по умолчанию
Конструктор — это специальная функция, которая является членом класса и имя которой совпадает с именем класса.
Конструктор объекта вызывается при создании объекта. Это означает, что он вызывается при выполнении инструкции объявления объекта. Конструкторы глобальных объектов вызываются в самом начале выполнения программы, еще до обращения к функции main(). Что касается локальных объектов, то их конструкторы вызываются каждый раз, когда встречается объявление такого объекта.
Деструктор — это функция, которая вызывается при разрушении объекта.
Дополнением к конструктору служит деструктор. Во многих случаях при разрушении объекту необходимо выполнить некоторое действие или даже некоторую последовательность действий. Локальные объекты создаются при входе в блок, в котором они определены, и разрушаются при выходе из него. Глобальные объекты разрушаются при завершении программы. Имя деструктора совпадает с именем конструктора, но предваряется символом "~" Подобно конструкторам деструкторы не возвращают значений, а следовательно, в их объявлениях отсутствует тип возвращаемого значения.
Конструктор по умолчанию – это конструктор класса, который объявляется без параметров. Конструктор может содержать значения аргументов по умолчанию. Задание в конструкторе аргументов по умолчанию позволяет гарантировать, что объект будет находиться в не противоречивом состоянии, даже если в вызове конструктора не указаны никакие значения. Созданный программистом конструктор, у которого все аргументы по умолчанию, называется конструктором с умолчанием, т. е. конструктором, который можно вызывать без указания каких-либо аргументов. Для каждого класса может существовать только один конструктор с умолчанием.
16. Конструктор копирования. Конструктор explicit. Параметризованные конструкторы. Перегрузка конструкторов класса.
Использование функций для установки начальных значений данных объекта часто приводит к ошибкам. В связи с этим введена специальная функция, позволяющая инициализировать объект в процессе его декларирования (определения). Эта функция называется конструктором. Функция-конструктор имеет то же имя, что и соответствующий класс.
Конструктором копирования называется специальный конструктор, применяемый для создания нового объекта как копии уже существующего. Такой конструктор принимает как минимум один аргумент: ссылку на копируемый объект. Общая форма конструктора копирования имеет вид:
имя_класса (const имя_класса &оbj) {// тело конструктора}
Здесь obj является ссылкой на объект в правой части инициализации. Конструктор копирования может иметь также дополнительные параметры, если для них определены значения по умолчанию. Однако в любом случае первым параметром должна быть ссылка на объект, выполняющий инициализацию
Ключевое слово explicit используется для создания «неконвертирующих (явных) конструкторов» (nonconverting constractors). Например, рассмотрим следующий класс:
class MyClass{ int i; public: MyClass(int j) { i = j; } // ...};
Объекты этого класса могут быть объявлены следующим образом: MyClass ob1(1); MyClass ob2 = 10; В данном случае инструкция MyClass ob2 = 10; автоматически конвертируется в следующую форму: MyClass ob2(10);
Однако, если объявить конструктор MyClass с ключевым словом explicit, это автоматическое конвертирование не будет выполняться. Ниже объявление класса MyClass показано с использованием ключевого слова explicit при объявлении конструктора:
class MyClass { int i; public: explicit MyClass(int j) {i = j; } // ...};
Теперь допустимыми являются только конструкции следующего вида: MyClass ob (110); Если по-простому, explicit нужен для того, чтобы решать проблемы с неявными конвертациями.
Конструкторам можно передавать аргументы. Обычно эти аргументы используются для того, чтобы помочь инициализировать создаваемый объект. Для того, чтобы создать параметризированный конструктор, достаточно попросту добавить параметры, как это делается для любой другой функции. При определении тела конструктора, т.е. кода, который реализует конструктор, эти параметры используются для инициализации объекта.
Общая форма для передачи аргументов конструктору имеет следующий вид: тип_класса объект(список_аргументов); Здесь список_аргументов представляет собой список аргументов, разделенных запятыми. Эти аргументы и передаются конструктору. Для передачи аргумента конструктору необходимо задать его значение при объявлении объекта. С++ поддерживает два способа решения этой задачи.
Первый из них выглядит следующим образом: queue а = queue(101); Здесь конструктор класса queue вызывается непосредственно с передачей ему значения 101. Значением переменной а служит сам созданный объект. Второй способ короче и более непосредственно ведет к цели. В этом методе аргумент или аргументы следуют непосредственно за именем объекта в скобках. Следующая строка кода служит той же самой цели, что и предыдущее объявление объекта: queue а(101)