按值传递,赋值对象的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),这个参数叫作引用,引用不会产生临时的复制对象的,和拷贝构造函数完全是两码事。
多看书,多写测试代码。
------解决方案--------------------
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; }