Пример:
Class Coord{
Float x, y, z;
Public:
coord(){x=y=z=0;}
coord(float xv, float yv, float zv=0){
x=xv; y=yv; z=zv;}
coord(coord&c){x=c.x; y=c.y; z=c.z}
};
class Triang{
coord vert1, vert2, vert3;
public;
Triang();
Triang(coord&v1, coord&v2, coord&v3);
}
При инициализации некоторого объекта класса Triang потребуется три раза вызвать конструкторы для его вершин – объектов класса Coord. Язык представляет такую возможность. Для этого в определении (а не просто в объявлении) конструктора класса Triang после двоеточия нужно поместить список обращений к конструкторам класса Coord.
Triang:: Triang(coord&v1, coord&v2, coord&v3);
vert1(v1), vert2(v2), vert3(v3);
Программа часто обрабатывает объекты, которые являются конкретными представителями абстрактных концепций. Такие концепции обычно включают набор операций представляющих основные операции над объектами кратким, удобным и стандартным способом. Однако из-за необходимости сохранения компактного представления языка только очень немного таких концепций могут поддерживаться языком программирования. Такую возможность обеспечивают классы. Классы задают представление непримитивных объектов вместе с набором операций которые можно выполнить над объектом. При этом для определения операций предлагается возможность применения более удобных и стандартных обозначений для обработки объектов класса, чем использование только функциональных обозначений.
class complex{
double re, im;
public:
complex(double r, double i){re=r; im=i;}
friend complex operatot +(complex, complex);
friend complex operatot *(complex, complex);
};
Приведенное объявление определит простую реализацию концепции комплексных чисел с плавающей точкой двойной точности, обрабатываемых посредством операций + и *. Смысл для операции + и * обеспечивается при помощи определения функций с именами operatot + и operatot* . Например пусть данные a и b имеют тип complex, тогда a+b обозначает по определению operatot +( a,b), теперь возможно дать интерпретацию комплексных выражений близкую к стандартной.
Пример:
Void f(){
complex a = complex(1, 3.1);
complex b = complex(1.2, 2);
complex c = b;
a=b+c; // a= operatot+(b,c)
b=b+c*a;//b= operatot+(b, operatot*(c,a))
c=a*b+ complex(1,2);
}
Имеют силу обычные правила приоритета, поэтому например второй оператор обозначает b+(c*a) а не (b+c)*a.
