- •45. Вызовы конструкторов в процессе работы программы.
- •48. Деструкторы.
- •49. Поля данных. Нестатические и статические поля – особенности их создания и инициализации. Правила обращения к полям. Константные поля.
- •50. Методы. Основные правила работы с методами. Константные методы. Статические методы.
- •51. Указатель this.
- •52. Дружественные функции и классы.
- •53. Перегрузка операций – общие положения.
- •54. Перегрузка операции присваивания. Особенности работы с ресурсоемкими объектами.
- •55. Перегрузка унарных операций.
- •56. Перегрузка бинарных операций.
- •57. Особенности определения классов с ключами struct и union.
- •58. Включение классов.
- •59. Наследование классов – общие положения.
- •Класс а
- •61. Общие особенности механизма простого наследования классов.
- •62. Множественное наследование.
- •63. Перечень специальных методов класса. Особенности определения конструкторов и деструкторов в производных классах.
- •64. Особенности определения и применения функций-операций «присваивание» в производных классах.
- •65. Особенности перегрузки операций в производных классах.
- •66. Общая характеристика виртуальных функций.
57. Особенности определения классов с ключами struct и union.
Class можно использовать ключи struct и union, то есть в С++ структуру и объединение рассмотрим как частные случаи класса. В подавляющем большинстве ситуаций уместно пользоваться ключом class, однако, применение других ключей может обеспечить доролнительные удобства. Рассмотри некоторые особенности:
при применении ключа struct элементы класса, для которых явно не указан доступ по умолчанию имеют доступ public
при использовании union все элементы имеют доступ public, причем других доступов быть не может
объединение (union) не может участвовать иерархии классов выстроенных по принципу
объединения не могут быть в классах, в которых явно определен конструктор, объединение может иметь собственный конструктор, но только не статический
в безыменном опредилении нельзя определять методы
58. Включение классов.
Между классами в одной программе могут быть разные отношения, наиболее простой вид отношений «включение классов», который предполагает, что некоторый поля класса А являются объектами класса B, следовательно В включен в А.
Пример.
Определить класс, в котором объекты точки на плоскости в декартовой системе координат.
class point { // (1)
// приватные поля
double x, y; // (2)
public // (3)
point (double x:= 0.0, double y1 = 0.0): x (x1), y (y1) { } // (4) конструктор общего вида играет роль конструктора умолчания и конструктора приведения типа
friend ostream & operator << (ostream & ont, point p); // (5) прототип функции операции перегрузки “<<” вывода
}; // (6) конец операции point
Конструктор копирования и операцию присваивания для этого класса создает компилятор. Реализация функции операции для класса point:
ostream & operator << (ostream & int, point p) { // (7)
out << “x = ‘ << p.x << “\t y = “ << p.y; // (8)
return out; } // (9) возвр. поток по ссылке
Здесь ostreram стандартный класс инкапсул. средства для вывода простых типов на экран дисплея.
Продемонстрируем отношение «включения класса». Определим класс circle, который будет моделировать окружности, он будет включать в себя в качестве поля объект класса point, который будет задавать центр окружности
class circle { // (10)
point cc; // (11) центр окружности
double rc; // (12) радиус окружности
public: // (13)
circle (point c, double r): cc (c), rc (r) { } // (14)
circle (double x, double y, double r): cc (x,y), rc (2) {y} // (15)
friend ostream & operator << (ostream & out circlec1); // (16) прототип функции операции для перегрузки операции вывода “<<”
}: // (17) конец определения класса circle
Конструктор копирования и операцию присваивания создает компилятор. Явно в этом классе определяются 2 конструктора приведения типов, следует обратить внимание на списки инициал. В этих конструкторах. При выполнении сс (с) в первом конструкторе будет вызван конструктор копирования класса point. При выполнении сс (x, y) в конструкторе 2 будет вызван конструктор умолчания.
Реализация функции “<<” имеет вид:
ostream & operator << (ostream & out, circle c1) { // (18)
out << “центр окружности:” << c1.cc << endl; // (19)
out << “радиус окружности:” << c1.rc<< endl; // (20)
return out: } // (21)
Примеры работы с объектами определения классов:
point pcenter; // (22) создаем объект точку, его поля будут инициализиованы конструктором умолчания
circle kryg1 (pcenter, 10); // (23)
circle kryg2 (1, 2, 20); // (24)
cout << krig1 << endl; // (25) применяем перегруженный объект типа circle
cout << krig2 << endl; // (26)