029全局函數與成員函數(返回元素、返回引用要使用*this)

/*
	成員函數與全局函數的區別與轉換
*/

#if 1
class Test
{
public:

	Test(int a = 0, int b = 0)
	{
		this->a = a;
		this->b = b;
	}

	//1、函數返回元素
	Test TestAdd(Test &obj)//對應的全局函數 Test TestAdd(Test &t1, Test &obj)
	{
		Test tmp(this->a + obj.a, this->b + obj.b);
		return tmp;//返回一個匿名對象
	}

	//2、函數返回引用 即 t1=t1 + obj 
	//返回一個引用 相當於返回自身返回t1這個元素,
	//this 就是&t1, this 是常指針
	Test& TestAdd2(Test &obj)
	{
		this->a = this->a + obj.a;
		this->b = this->b + obj.b;
		return *this;//把 *(&t1)  又回到了 t1元素
	}

	~Test()
	{
		cout << "a:" << a << " b: " << b;
		cout << "析構函數自動被調用" << endl;
	}

	//3、成員函數
	void printT()
	{
		cout << "a:" << a << " b: " << b << endl;
	}
public:
	int a;
	int b;
};

//4、全局函數 
void printT(Test *pT)//成員函數 轉成全局函數  多了一個參數
{
	cout << "a" << pT->a << "b" << pT->b << endl;
}

//全局函數方法
//全局函數 轉成 成員函數  少了一個參數 
Test TestAdd(Test &t1, Test &t2)//對應的成員函數 Test TestAdd(Test &obj)
{
	Test tmp;
	tmp.a = t1.a + t2.a;
	tmp.b = t1.b + t2.b;
	return tmp;
}


void test()
{
	Test t1(1, 2);
	Test t2(3, 4);
	Test t3;//偷懶的寫法:是在構造函數中直接使用默認參數 
			//即Test(int a, int b)改成Test(int a = 0, int b = 0)
	
	
	t3 = TestAdd(t1, t2); //全局函數方法
	t3.printT();

	//成員函數法
	
	{
		//先把測試案例寫出來 t4 = t1 + t2
		Test t4 = t1.TestAdd(t2);//匿名對象直接轉化爲t4
		t4.printT();
		
		Test t5;
		t5 = t1.TestAdd(t2);//匿名對象複製給t5

		//函數返回引用 t1 = t1+ t2
		t1.TestAdd2(t2);
		t1.printT();
	}
}
#endif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章