在复制构造函数中表示什么?

时间:2011-09-05 11:25:59

标签: c++ constructor copy-constructor

#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是什么意思?

2 个答案:

答案 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