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