370 Часть III. Современное программирование на C++

Конструктор КОПИЙ. Конструктор копий настолько важен, что если вы его пропустите, то компилятор создаст его за вас. Конструктор копий имеет вид х(х&), где х— это имя класса. Конструктор копий используется для того, чтобы гарантировать правильную инициализацию из уже существующих объектов.

Поскольку конструктор копий имеет то же имя, что и остальные, он является перегружаемой функцией. Детальное рассмотрение конструктора копий с примерами приведено в главе 17.

Примеры перегружаемых конструкторов. В листинге 15.2 приведен пример тривиального класса х, содержащего три конструктора. Вы также увидите здесь список инициализации.

h03701.jpg

1

// CONSTRUCT.СРР — Иллюстрация уточнения имен конструкторов.

2

//' Не задумывайтесь о конкретной реализации каждого конструктора

3

// Это не так важно. Обратите внимание на .map-файл,

4

// где видно, как конструкторы перегружаются.

5

class Х

6

{

7

public:

8

Х(): n ( 0) (} // конструктор по умолчанию

9

// со списком инициализации. Х( int а) : п( а) {} // целый аргумент, инициализация

10

//и пустая функция. Х(Х& rhs) { n = rhs.n; } // конструктор копий

11

~Х() (); // деструктор

12

private:

13

int n;

14

};

15

void main ()

16

{ X х;

17

X у = у; // вызов конструктора копий

18

}


В строках 8—10 определены три конструктора (как встраиваемые функции). Первый — это конструктор по умолчанию; второй — конструктор с одним аргументом соответствующего единственному данному-члену типа; и третий — одна из реализации конструктора копий.

Замечание

Идентификатор rhs в конструкторе копий — это соглашение, которое некоторые программисты на ассемблере используют для обозначения правосторонних (right-hand-side) аргументов. Хотя в некоторых примерах действительно используется ассемблер, но здесь rhs — это не сокращенная нотация, а просто переменная.