370 Часть III. Современное программирование на C++
Конструктор КОПИЙ. Конструктор копий настолько важен, что если вы его пропустите, то компилятор создаст его за вас. Конструктор копий имеет вид х(х&), где х— это имя класса. Конструктор копий используется для того, чтобы гарантировать правильную инициализацию из уже существующих объектов.
Поскольку конструктор копий имеет то же имя, что и остальные, он является перегружаемой функцией. Детальное рассмотрение конструктора копий с примерами приведено в главе 17.
Примеры перегружаемых конструкторов. В листинге 15.2 приведен пример тривиального класса х, содержащего три конструктора. Вы также увидите здесь список инициализации.
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 — это не сокращенная нотация, а просто переменная.