Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++.docx
Скачиваний:
19
Добавлен:
10.06.2015
Размер:
95.05 Кб
Скачать

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)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]