顛覆了我對C++等號運算符的重載的認識

#include<iostream>
using namespace std;

class Model
{
private:
	int val;
public:
	Model(int n = 0) :val(n) {}
	Model(const Model& obj) {
		val = 2*obj.val;
	}
	Model& operator=(const Model& obj) {
		val = 4 * obj.val;
		return *this;
	}
	void print() {
		cout << val << endl;
	}
};

int main() {
	Model obj1(10), obj2 = obj1, obj3;
	obj3 = obj1;
	obj2.print();
	obj3.print();
	return 0;
}

輸出結果:
竟然是:
20
40
而不是:
40
40

原因:對Model obj1(10), obj2 = obj1, obj3;中等號運算符的認知不正確,此處竟然執行了拷貝構造,而不是等號的重載運算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章