Float mod (Complex z)
Float image (Complex z)
Float real (Complex z)
{ return z.re; }
{ return z. im; }
{ return sqrt (z.re* z.re + z.im*z. im); }
{ z. re + =y. re;
z. im + =y. im;
return z; }
void main () {
Complex c1, c2, c3;
c1.define(3, 4); c2.define(5, 6); c3.define(0, 0);
float m= mod(c1);
cout<< ‘\n’<< m;
c3 = sum(c1, c2);
cout<<’\n’<< “ sum:” <<real(c3);
(image(c3)<0)? cout<< image (c3)<< ‘i’: cout<< ‘+’ <<image(c3)<<’i’;
}
Сложение в функции sum велось в одном из аргументов (z), с тем же успехом можно было использовать и y.
Сложение двух объектов выглядит симметрично, но для сложения данных (объектов) используется функция, а не операция ‘+’, что довольно нелепо.
Ниже мы рассмотрим и такую возможность С++ как перегрузку операций для переменных типа class.
Дружественные классы
Если все компонентные функции одного класса являются дружественными для другого класса, то класс является дружественным другому классу
Объявление дружественного класса:
Class X { …};
Class Y { … friend class X; … };
Все приватные и защищенные члены класса Y могут обрабатываться функциями класса X, то есть доступны в дружественном классе.
Дружественный класс может быть определен позже, нежели описан как дружественный:
Class X1 { … friend class X2;…};
Class X2 { …void f (…);… };
Конструкторы и деструкторы
Класс может содержать любое количество функций - членов самого разнообразного назначения, но два типа функций занимают особое положение. Эти функции называются конструктором и деструктором.
Для многих объектов естественно требовать, чтобы они были инициированы (т.е. имели начальное значение, а не мусор) до начала их использования.
В С++ для упрощения процесса инициализации объектов предусмотрена специальная функция, называемая конструктором.
Конструктор – это компонентная функция, вызываемая автоматически при создании объекта класса и выполняющая необходимые инициализирующие действия.
1) Основное назначение – инициализация объектов.
- инициализация данных класса - задание им начальных
значений программно или по умолчанию,
- открытие файлов,
- перевод видеосистемы в графический режим
- вывод сообщения,
- инициализация объектов вспомогательных классов и. т. д.
2) Имя конструктора должно совпадать с именем класса.
3) Функция-конструктор не может возвращать результат, даже тип void не
допустим.
4) Функция автоматически вызывается при определении объекта, или при размещении в памяти объекта с помощью операции new.
5) Формат определения конструктора в теле класса:
< имя класса> (список формальных параметров)
{ операторы тела конструктора }
Конструктор, как и любая компонентная функция, может быть определен и вне тела класса, имея в теле класса прототип.
class T {
…
public: