Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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

Определение конструктора копирования

Конструктор копирования должен иметь для данного класса такой вид:

1. T (T obj) { x = obj.x; y = obj. y } // не верно!

Но тогда в сам конструктор копирования должен копироваться объект, т.е. должен вызываться сам конструктор копирования, в котором опять для копирования будет вызываться сам конструктор. Возникла бы бесконечная рекурсия.

Рекурсию можно избежать, если не копировать объект в конструктор, а использовать передачу параметра по ссылке:

2. T (T & obj) { x = obj.x; y = obj. y }

И последнее – необходимо ввести запрет на модификацию копируемого параметра для этого используется ключевое слово const:

3. T (const T & obj) { x = obj.x; y = obj. y }

В общем случае третий вариант наиболее правильный (и так выглядит конструктор по умолчанию), однако структура конструкторов, такова, что в них отсутствуют действия, изменяющие копируемый объект. Поэтому в дальнейшем часто будем останавливаться на втором варианте.

Рассмотрим, как происходит копирование.

Как удостоверится, что

- при копировании объекта,

- при передачи объекта в функцию,

-при возвращении функцией объекта в некоторую

переменную (также объект)

вызывается конструктор копирования по умолчанию, или конструктор копирования явно определенный в классе?

Для того, чтобы зафиксировать факт вызова конструктора копирования, мы правильное копирование (в программе написанной выше, конструктор варианта 3 вызывается по умолчанию) заменим на копирование с приращением:

class T {





Дата публикования: 2014-11-28; Прочитано: 244 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...