
- •Введение в ооп
- •Алгоритмическое и объектно-ориентированное программирование
- •3.Основные понятия объектно-ориентированного программирования
- •4. Объекты и их атрибуты
- •5. Структура визуальной среды
- •4. Страж кода (Code Guard).
- •7. Синтаксис и семантика классов
- •8. Доступ к элементам класса (объекта)
- •9. Встраиваемые функции-элементы
- •10. Создание экземпляров класса. Конструктор
- •Создание объекта в динамической памяти
- •11. Уничтожение объектов класса. Деструктор
- •12. Статические компоненты класса
- •13. Постоянные и модифицируемые элементы-данные
- •14. Передача адреса объекта компонентной функции. Указатель this
- •15. Конструктор копии
- •16. Перегрузка функций и операций
- •17. Операция присваивания для объектов
- •18. Функции преобразования типа объекта
- •19. Наследование. Общие положения
- •Влияние ключа доступа при наследовании
- •20. Простое наследование
- •21. Множественное наследование
- •22. Виртуальное наследование
- •23. Виртуальные функции
- •24. Динамический полиморфизм
- •25. Абстрактные классы
- •26. Дружественные функции и классы
- •27. Шаблоны
- •28. Стандартная библиотека шаблонов. Общие положения
- •29. Примеры контейнеров
- •30. Обработка исключительных ситуаций. Общие положения
- •Синтаксис и семантика генерации и обработки исключительных ситуаций
- •32. Использование объекта класса для возврата параметров исключений
- •33. Ограничение перечня возбуждаемых исключительных ситуаций
- •34. Повторное возбуждение исключительной ситуации. Вложенные блоки try
- •35. Организация проектировани и документирования разработки объектно-ориентированных программ
- •1. Отображение классов.
- •2. Отображение отношений между классами
9. Встраиваемые функции-элементы
Если определение функции помещено в описание класса, то такая функция-элемент является встраиваемой.
Для встраиваемой функции компилятор генерирует ее код в точке вызова. Это сокращает время выполнения программы, но увеличивает объем программы.
Если определение функции помещено вне описания класса, то Функция-элемент не является встроенной . Машинный код такой функции транслятором генерируется однократно, а привязка кода к точке вызова (вызывающему объекту) осуществляется с помощью указателя this (передачей адреса) во время выполнения программы (позднее связывание).
Если определение функции-элемента расположено вне класса, то ей можно установить статус встроенной с помощью ключевого слова inline в ее описании в классе, например:
class A
{ public: inline void func();
};
void A::func() {тело функции}
10. Создание экземпляров класса. Конструктор
Экземпляры класса создаются с помощью специальной компонентной функции класса – конструктора.
Конструктор представляет собой специальную функцию-элемент, которая имеет имя, идентичное имени класса, объявляется без типа возвращаемого значения (ничего не возвращает в точку вызова и поэтому не имеет оператора return) и этим формально отличается от обычных функций. Если конструктор не определен в классе, то компилятор генерирует конструктор по умолчанию без параметров. Конструктор вызывается всегда, когда создается новый объект.
В теле конструктора могут быть любые операторы, в том числе и вызовы функций. Конструктор не наследуется, не может быть объявлен с атрибутами const, volatile или static и не может быть объявлен как виртуальный.
Конструктор с параметрами позволяет инициализировать объект путем присваивания элементам-данным начальных значений.
Явно определенный в классе конструктор может быть с параметрами и без параметров. Определение конструктора имеет вид:
имя_класса( список_параметров ) { тело }
имя_класса() { тело }.
В первом случае значениями параметров в теле конструктора инициализируются элементы-данные класса. Во втором случае инициализация осуществляется значениями, заданными в теле конструктора. Если конструктор генерируется по умолчанию, то инициализация осуществляется нулевыми значениями.
При явном определении конструктора элементы-данные могут инициализироваться двумя способами:
- индивидуальным присвоением значений компонентным данным в теле конструктора;
- использованием списка инициализации данных в заголовке конструктора
Пример:
а) class Time
{ int hr, min;
public: Time (int h) {hr = h; min = 0;} // 1 - й способ
Time (int h, int m): hr(h), min(m){} // 2 – й способ
};
void main(){
Time start1(17);
Time start(17,45);
}
б) class Time { // комбинация двух способов
int min; const int hr;
public:
Time (int h, int m): hr(h) {min = m;}
};
Список инициализации является единственным средством присвоения значений элементам-данным класса, объявленным как const или как ссылки.
Для вызова конструктора используется следующие синтаксические формы:
имя_класса имя_объекта;
имя_класса имя_объекта(аргументы);
имя_класса(аргументы);
Первая форма используется для вызова стандартного конструктора (по умолчанию). Вторая форма используется для конструктора с параметрами. Третья форма используется для создания и инициализации объекта без имени, когда необходимо инициализировать вновь создаваемый объект значениями другого объекта (без имени) с помощью операции присваивания или когда имя объекта не используется в последующем контексте программы. Именно такая форма используется при создании объекта в динамической памяти.
Пример:
myclass ob1;
myclass ob1(4);
myclass ob1 = myclass(4); //автоматически вызывается конструктор копии.