- •2 . Пример
- •Лабораторная работа № 2
- •1 Содержание работы
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •2. Пример
- •Лабораторная работа№ 3
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •Часть вторая: Оператор выбора
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •Группа а Таблица 7
- •Группа в
- •2. Примеры
- •Лабораторная работа№ 4
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •2 Примеры
- •For (выражение1; выражение2;выражение3) {операторы; }
- •Лабораторная работа№ 5
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •2. Примеры
- •3. Сортировка элементов массива
- •Сортировка выбором
- •3.2. Сортировка вставкой
- •3.3. Сортировка методом прямого выбора
- •3.4. Сортировка методом обмена
- •Лаборатоная работа № 6
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •Методические указания
- •Лабораторная работа № 7
- •1 Порядок выполнения лабораторной работы:
- •Лаборатоная работа № 8
- •1 Порядок выполнения лабораторной работы:
- •Задания
- •2. Теоретические сведения
- •Год рождения – 1978
- •Лабораторная работа № 9
- •1 Порядок выполнения лабораторной работы:
- •Лабораторная работа № 10
- •1 Порядок выполнения лабораторной работы:
- •2. Задание для выполнения
- •2. Примеры
- •Лабораторная работа № 11
- •1 Порядок выполнения лабораторной работы:
- •2. Задание для выполнения
- •Варианты заданий
- •Лабораторная работа № 12
- •1 Порядок выполнения лабораторной работы:
- •2. Краткие теоретические сведения Объектно-ориентированный подход
- •Сущности и Объекты
- •Система типов
- •Инкапсуляция
- •Пример класса
- •Создание объектов. Конструкторы и деструктор
- •Наследование
- •Перегрузка функций
- •Полиморфизм
- •Функции-друзья
- •Абстрактные классы
- •Дополнительные возможности
- •Индивидуальные задания
- •2.1. Пример решения задания
- •Int windForce; // Сила ветра в баллах
- •Int startHeight; // Начальная высота
- •Int fuel; // Запас топлива
- •Результат выполнения программы:
- •Список использованной литературы
Создание объектов. Конструкторы и деструктор
C++ обеспечивает удобные способы создания и удаления объектов, через специальные процедуры создания объектов (конструкторы) и процедуру уничтожения (деструктор). Конструкторы автоматически вызываются при описании объекта, а деструкторы – при выходе из блока, в котором этот объект был описан. Если необходимые конструкторы или деструктор для класса не описаны, то транслятор создает их сам.
Конструкторы имеет то же имя, что и класс, а деструкторы наследуют имена своих классов, с добавлением лидирующего знака тильда '~'.
Конструкторы могут вызываться явно или неявно – через обращение во время объявления объекта. Задавая объекту параметры, вы сообщаете об их передаче непосредственно конструктору:
Account myAccount(10001);
Account *pExtraAccount = new Account(10002);
Как и конструкторы, деструкторы могут вызываться явно (при помощи оператора С++ delete) или неявно – при выходе объекта из области действия, например:
{
Account myAccount(10001);
Account *pExtraAccount = new Account(10002);
// ...
delete pExtraAccount; // <<< явный вызов деструктора
} // <<< неявный вызов деструктора для myAccount
Класс может иметь несколько конструкторов с различными параметрами, в то время как деструктор задается один и не имеет параметров.
Методы
Классы С++ могут содержать в качестве своих элементов данные и функции-элементы. Функция элемент – это функция, объявленная внутри определения класса и тесно связанная с типом этого класса. Функция элемент может объявляться в пределах своего класса, но определяться где-либо в другом месте программы.
Общий вид синтаксиса вызова метода выглядит как:
имя_класса_объекта.имя_функции(список аргументов);
В случае, если функция элемент объявлена, и определена в своем классе, то тогда она называется встроенной функцией. Это макрос-подобные функции, которые вставляются код исполнения, непосредственно в том месте откуда они вызываются – такая подстановка выполнит код функции сразу, экономя время необходимое для ее вызова. Этого же эффекта можно добиться, добавив в объявление и к телу функции, определенной вне класса ключевое слово inline. При определении функции вне класса необходимо использовать селектор области действия '::' между определяемым классом и функцией элементом.
В члене функции ключевое слово this указывает на объект, для которого вызвана функция. То есть в функцию элемент всегда «неявно» передается указатель на объект, который вызывает эту функцию.
Наследование
С++ позволяет множественное наследование, то есть способен брать существующие – базовые классы (один или несколько) и порождать от них новый класс – потомок, с наследованием всех атрибутов и поведения. Наследование позволяет на хорошем уровне разделять код и данные, а также разрешает полиморфизм.
Общий вид синтаксиса реализации наследования при объявлении класса:
class класс_потомок : <тип_доступа> базовый класс
[, <тип_доступа> базовый класс ...]
По умолчанию элементы базового класса автоматически получают приватный (private) тип. Использование же ключевого слова public, при порождении потомка класса, делает все элементы базового класса общими в порожденном классе. Приватные элементы базового класса остаются приватными, и не будут доступны из потомков:
Тип доступа в базовом классе |
Тип доступа в потомке |
Доступность элемента базового класса |
private |
private |
недоступен |
protected |
private |
private |
public |
private |
private |
private |
public |
недоступен |
protected |
public |
protected |
public |
public |
public |
Рассмотрим реальный пример:
class BaseA {
private: int privA;
protected: int protA;
public: int pubA;
};
class BaseB {
private: int privB;
protected: int protB;
public: int pubB;
};
class Derived: private BaseA, public BaseB {
public:
void func() {
// privA и privB недоступны!
protA = pubA = protB = pub = 0;
}
};
void main() {
Derived x;
// privA, protA, pubA, privB и protB - недоступны!
x.pubB = 1; // единственный доступный элемент!
}
