Назначение:
1) создать объект полностью совпадающий с уже созданным;
2) передача в некоторую функцию экземпляра класса, при этом в стеке создается локальная копия объекта, с которым и работает функция;
3) функция передает в некоторую переменную объект класса, фактически этот объект сначала создается в функции как локальная переменная, и лишь затем копируется в переменную, стоящую в левой части выражения.
Операции копирования объектов выполняет конструктор копирования.
В большинстве случаев компилятор предоставляет нам конструктор копирования по умолчанию, обеспечивая правильное копирование.
Копирование по умолчанию:
class T {
int x, y;
public:
T (int tx, int ty) { x = tx; y = ty; }
int GetX () { return x; }
int GetY () { return y; }
friend T sum (T, T);
};
Void Print (T obj)
{ cout<<’\n’<<”x=”<<obj.GetX() <<” y=”<<obj.GetY(); }
T sum (T obj1, T obj2)
{ obj1. x + =obj2. x;
obj1. y + =obj2. y;
return obj1; }
#include <iostream.h>
void main () {
T e1 (1, 10); //создали объект, вызвав конструктор с параметрами
Print (e1); // первое копирование
T e2 = e1; // второе копирование
|
|
Print (e2); // третье копирование
T e3 = sum (e1, e2); // четвертые копирования
Print (e3); // пятое копирование
}
// выведется:
// x= 1 y = 10
x= 1 y = 10
x= 2 y = 20