/*
成員函數與全局函數的區別與轉換
*/
#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
029全局函數與成員函數(返回元素、返回引用要使用*this)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.