按值传递,赋值对象的1点不理解

按值传递,赋值对象的一点不理解


A(A &){cout<<"成功被复制"<<endl;}
A func(A one)
上面的这两句话,前一句的(A &)为什么能跟后面的(A one)对应,而不是(A &one)对应。

完整代码代码如下:
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"成功赋值"<<endl;}
A(A &){cout<<"成功被复制"<<endl;}
~A(){cout<<"析构函数执行"<<endl;}
};
A func(A one)
{
return one;
}
int main()
{
A my;
func(my);
return 0;

}

------解决方案--------------------
A(A &)

叫作拷贝构造函数

(A one),A对象作为一个参数传入函数,函数要产生一个临时变量,复制一个one对象,这时就会调用拷贝构造函数

(A &one),这个参数叫作引用,引用不会产生临时的复制对象的,和拷贝构造函数完全是两码事。

多看书,多写测试代码。
------解决方案--------------------
C/C++ code

/* Auther:独酌逸醉
 * Date:2012.08.07
 * IDE:Codeblocks 10.05
 * OS: Win 7
 */

#include <iostream>
using namespace std;

class A
{
public:
    A(){cout<<"成功赋值"<<endl;}
    A(A &){cout<<"成功被复制"<<endl;}
    ~A(){cout<<"析构函数执行"<<endl;}
};
/* 因为 one 不是引用传参,所以会调用 copy constructor
 * 传参的时候构造一个副本,返回的时候再构造一个副本,所以调用两次。
 * 假如你改成引用传参,如 func1,会产生一个副本
 * 假如你再将返回值设为引用,如 func2,没有副本产生
 */
A func(A one)
{
    cout << "Hi, I'am in func" << endl;
    return one;
}
A func1(A& one)
{
    cout << "Hi, I'am in func1" << endl;
    return one;
}
A& func2(A& one)
{
    cout << "Hi, I'am in func2" << endl;
    return one;
}
int main()
{
    A my;
    func(my);
    func1(my);
    func2(my);
    return 0;
}