#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
引用了什么?当我在t
的参数中传递t_1
时,它的地址被存储在复制构造函数中的&t
形式中。 t.a
是什么意思?
答案 0 :(得分:5)
它是对正在复制以构造新对象的现有对象的引用。复制构造函数应根据需要从t
读取相关字段。
在您的示例中,您可能希望像这样复制a
字段:
tester( tester &t ) {
cout << t.a;
a = t.a;
}
答案 1 :(得分:4)
在复制构造函数t
中是对tester
类型对象的引用。
复制构造函数是复制功能 它创建了一个类对象的副本,因此它将该类的对象作为参数。调用此复制构造函数以在函数调用等中按值调用期间创建对象的临时副本。
为什么参数传递此参数?
参数作为复制构造函数中的引用传递的原因是为了避免复制构造函数的递归调用(如果它是通过值传递的)。(因为复制构造函数本身就是创建该临时对象的函数)
t.a
是什么意思?
由于t
是对tester
类型对象的引用。 t.a
是类a
中的成员tester
,用于传递给复制构造函数的对象t
。