что означает «т» в конструкторе копирования? - PullRequest
0 голосов
/ 05 сентября 2011
#include <iostream>

using namespace std;

class tester {
public:
int a;
tester( int x ) {
    a = x;
}

tester( tester &t ) {
    cout << t.a;
}
};

int main() {
 tester t(10);
 tester t_1(t);
}

output : 10

В определении конструктора копирования на что ссылается t?От main, когда я передал t в аргументе t_1, его адрес был сохранен в виде &t в конструкторе копирования.Что означает t.a?

Ответы [ 2 ]

5 голосов
/ 05 сентября 2011

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

В вашем примере вы, вероятно, захотите скопировать поле a следующим образом:

tester( tester &t ) {
   cout << t.a;
   a = t.a;
}
4 голосов
/ 05 сентября 2011

В конструкторе копирования t - ссылка на объект типа tester.

Конструктор копирования - это функция копирования .
Он создает копию объекта класса, поэтому он принимает объект этого класса в качестве параметра. Этот конструктор копирования вызывается для создания временных копий объекта во время вызова по значению в вызовах функций и т. Д.

Почему этот параметр передается по ссылке?
Причина, по которой параметр передается в качестве ссылки в конструкторе копирования, состоит в том, чтобы избежать рекурсивного вызова конструктора копирования, если он был передан по значению (поскольку сам конструктор копирования является функцией, которая создает этот временный объект)

Что означает t.a?
Так как t является ссылкой на объект типа tester. t.a является членом a внутри класса tester для объекта t, передаваемого в конструктор копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...