
- •1. Объявление класса. Примеры. Понятие инкапсуляции, полиформизма, наследования.
- •2. Доступ к членам класса. Управление доступом к членам класса. Указатель this. Примеры.
- •3. Конструкторы и деструкторы. Параметризованные конструкторы. Примеры.
- •4. Дружественные ф-ции. Примеры.
- •5. Перегрузка функций. Значение аргументов ф-ции по умолчанию. Примеры.
- •6. Наследование. Примеры.
- •7. Передача объектов в ф-ции и возврат объекта из ф-ции. Массивы объектов. Примеры.
- •8. Перегрузка операторов при помощи функций-членов класса. Примеры.
- •9. Перегрузка операторов при помощи дружественных ф-ций. Примеры.
- •10. Ссылки, ссылки на объекты. Примеры.
- •11. Конструктор копирования. Примеры
- •12. Наследование и спецификаторы доступа. Примеры.
- •13. Конструкторы и деструкторы производных классов. Примеры.
- •14. Указатели и ссылки на производные типы. Примеры.
- •Ссылки на производные классы
- •15. Виртуальные ф-ции. Примеры.
- •16. Чисто виртуальные ф-ции и абстрактные классы. Примеры.
- •17. Обработка исключений. Примеры.
- •18. Создание собственных операторов вставки и извлечения. Примеры.
- •19. Файловый ввод-вывод. Примеры.
- •20. Формирование ввода-вывода. Примеры.
- •21. Двоичные файлы. Примеры.
- •22. Произвольный доступ. Примеры.
- •23. Ввод-вывод в массивы Примеры.
- •24. Класс string. Примеры.
- •25. Функции-шаблоны. Примеры.
- •Явная перегрузка функций-шаблонов
- •26. Классы-шаблоны. Примеры.
- •27. Пространства имён. Примеры.
- •28. Статические члены класса. Примеры.
- •30. Идентификация типа во время исполнения. Примеры.
- •31. Новые операторы приведения типов. Примеры.
- •32. Контейнерные классы. Примеры.
3. Конструкторы и деструкторы. Параметризованные конструкторы. Примеры.
Конструктор
Конструктор представляет собой специальную функцию, которую C++ автоматически вызывает каждый раз при создании объекта.
Конструктор инициализирует представитель класса (объект) и является функцией-элементом с тем же именем, что и класс. Конструктор вызывается компилятором всегда, когда создается представитель класса.
Для конструкторов выполняются следующие правила:
1. для конструктора не указывается возвращаемый тип;
2. конструктор не может возвращать значение;
3. конструктор не наследуется.
Деструктор
Деструктор является дополнением конструктора. Он имеет то же имя, что и класс, но с префексом-тильдой (~). Он вызывается всякий раз, когда уничтожается представитель класса. Для деструктора существуют следующие правила:
1. деструктор не может иметь аргументов;
2. деструктор не может возвращать значения;
3. деструктор не наследуется.
Параметризованные конструкторы
Конструктор копирования – позволяет предотвратить проблемы, которые могут возникнуть при присваивании одного объекта другому, он применяется для создания нового объекта как копии уже существующего. Такой конструктор принимает как минимум один аргумент: ссылку на копируемый объект.
Обычно компилятор автоматически создает конструктор копирования для каждого класса (известные как неявные конструкторы копирования), но в некоторых случаях программист создает конструктор копирования, называемый в таком случае явным конструктором копирования. В подобных случаях компилятор не создает неявные конструкторы.
имя_класса (const имя_класса &ссылка_на_объект) { //тело конструктора}
Здесь ссылка_на_объект связана с объектом, стоящим в правой части инициализации.
Конструктор с параметрами – конструкторы, которые позволяют избежать применения отдельных ф-ций для инициализации одной или нескольких переменных в объекте.
Конструкторам можно передавать аргументы, предназначенные для инициализации объекта. Параметры конструктора задаются так же, как и для любой другой ф-ции.
Параметризованные конструкторы
Конструкторам можно передавать аргументы. Для того, чтобы создать параметризированный конструктор, достаточно добавить параметры, как это делается для любой другой функции.
Общая форма передачи аргументов конструктору:
ярлык_класса объект(список_аргументов);
4. Дружественные ф-ции. Примеры.
Дружественные классы
Разрешить элементам другого класса полный доступ к элементам данного класса, объявленным как private или protected, можно включив в определение данного класса описание friend.
Пример.
class myclass
{
friend class another_class;
};
Дружественные функции
Разрешить обычной функции или функции-элементу другого класса полный доступ к элементам класса, объявленным private или protected, можно с помощью описания friend в определении данного класса.
Пример.
class myclass
{
friend void another_class::member(int);
friend void func_name(float);
};
Для друзей существуют следующие правила:
1. на описания friend не влияют спецификаторы public, protected или private;
2. описания friend не взаимны: если А объявляет В другом, то это не означает, что A является другом для B;
3. дружественность не наследуется: если А объявляет В другом, классы, производные от В, не будут автоматически получать доступ к элементам А;
4. дружественность не является переходным свойством: если А объявляет В другом, классы, производные от А, не будут автоматически признавать дружественность В.
Одна из причин, почему язык С++ допускает существование функций-друзей, это ситуация, когда два класса должны использовать одну и ту же функцию.
Пример
class line;
class box {
int color;
...
public:friend int same_color(line l, box b);
...
};
class line {
int color;
...
public:friend int same_color(line l, box b);
…
}; // возвращает истину, если линия и прямоугольник имеют одинаковый цвет
int same_color(line l, box b)
{
if (l.color == b.color) return 1;
return 0;}