的我寫一個代碼來測試使用賦值操作符和拷貝構造函數。代碼如下:懷疑的代碼來測試使用賦值運算符
#include <iostream>
#include <algorithm>
using namespace std;
class fun {
int i;
public:
fun():i(1) {i=1;cout<<"in: cons\n";}
~fun() {cout<<"in: des\n";}
fun& operator=(fun b) {
cout<<"in: assignOp\n";
swap(this->i, b.i);
return *this;
}
fun(fun& b) {
cout<<"in: copy cons\n";
b.i = this->i;
}
void print() {
cout<<i<<endl;
}
};
main()
{
fun A;
fun B;
B = A;
A.print();
}
這裏是代碼的輸出:
在:利弊
在:利弊
中:複製利弊
在:assignOp
在:DES
-1216991244
在:在Des
:DES
現在,有兩件事情,我無法理解有關的輸出。
首先,爲什麼是代碼要在拷貝構造函數? 其次,爲什麼'i'的值被打印爲垃圾而不是'1'?
我是一個新手,所以原諒我,如果我的疑問是顯而易見的。
你的賦值運算符,除了在答案中描述的問題,是不是實際上是_assignment_。如果你想做一個交換,那麼你應該做一個'交換'功能。改變操作符的語義不僅會讓其他人感到困惑,它可能會讓你自己在幾個月後感到困惑。 – 2013-05-04 16:08:43