c++这样的构造函数怎么使用?

2013-10-25 17:08:13 +08:00
 smallghost
class A {
public:
A(A&);
};

A::A(A&) {
// 这里的A&表示啥?怎么使用呢?
}
3355 次点击
所在节点    程序员
9 条回复
timonwong
2013-10-25 17:11:57 +08:00
拷贝构造函数。

A a1 = A();
A a2 = a1;
yujnln
2013-10-25 17:15:32 +08:00
楼上例子错了吧?
A a2 = A(a1);

A&代表class A对象的引用
smallghost
2013-10-25 17:24:06 +08:00
class A {
public:
A(A&);
int i;
};

int main() {
A a;
a.i = 100;
A c(a);
A b = a;
// 这里 c.i 和 b.i 是多少呢?
return 0
}
pagict
2013-10-25 17:25:36 +08:00
都是100啊
dorentus
2013-10-25 17:27:55 +08:00
@yujnln 没错的。

就拿你这个「A a2 = A(a1);」为例,A(a1) 可以理解成把 a1 转型为 A 类型,但是 a1 本身就是 A 的实例,于是直接写 a1 就足够了。

另外如果没有特殊原因,拷贝构造函数最好写成这样吧:A(const A&); 这样写你就表明了你这个函数里面不会对传入的参数作修改。
66beta
2013-10-25 18:20:23 +08:00
复制/拷贝构造函数

A&表示一个A类对象的引用
函数参数分为:传值和传引用(地址)


上周刚考过C++,我感觉能过 XD
Golevka
2013-10-25 18:45:14 +08:00
C++ 11又多了一个move constructor (A::A(A &&)), 于是情形变得乱上加乱.

"Only a computer scientist would create a copy, and then destroy the original" --Bjarne Stroustrup on GoingNative 2013 Keynote
Ricepig
2013-10-25 20:54:00 +08:00
@dorentus 这个代码多初始化了一个A对象

A a;
A b=a;

或者

A b(a)
jiangtao92
2013-10-27 18:36:03 +08:00
如果你要表达的是复制构造函数的话,至少是应该这样 A(const A & copy)

为什么是 A(const A & copy) 而不是 A(const A copy)

c++ 的复制构造函数 在实参传到形参(非引用类型)的时候 会被隐式的调用 比如:
A a1;
A a2(a1);// 如果你是A(const A copy) 就是无限的递归调用

A(const A & copy) 因为是引用类型,不会隐式的调用复制构造函数.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/86890

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX