C++之全局函数和成员函数互相转换
解析:成員函數會用this指針自動隱藏第一個操作數(左操作數)
1、把全局函數轉化成成員函數,通過this指針隱藏左操作數。
Test add(Test &t1,Test &t2)? ? ?==>? ? Test add(Test & t2);
2、把成員函數轉化成全局函數,多了一個參數
vpid printAB()? ? ? ==>? ? ? void printAB(Test *pthis);
3、函數返回元素和返回引用
Test &add(Test &t2)//*this //函數返回引用{this->a = this->a+t2.getA();this->b = this->b+t2.getB();return *this;//操作讓this指針回到元素狀態}Test add2(Test &t2)//*this //函數返回元素{//t3是局部變量Test t3(this->a+t2.getA(),this->b+t2.getB());return t3;}?
函數返回元素,實例代碼:
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<iostream> using namespace std; ? class Test { public: ????int a; ????int b; public: ????~Test() ????{ ????????cout << "析構函數:" << "a:" << a << "b:" << b <<endl; ????} ????Test TestAdd(Test &t2) ????{ ????????Test tmp(this->a+t2.a,this->b+t2.b); ????????return tmp; ????} ????Test(int a=0,int b=0) ????{ ????????this->a = a; ????????this->b = b; ????} ????void printT() ????{ ????????cout << "a:" << a << "b:" << b <<endl; ????} } ? //把成員函數 轉成 全局函數 多了一個參數 void printT(Test *pt) { ????cout << "a:" << pt->a << "b:" << pt->b <<endl; } //全局函數的方法 //全局函數 轉成 成員函數 少了一個參數 Test TestAdd(Test &t1,Test &t2) { ????Test tmp; ????return tmp; } ? int main() { ????Test t1(1,2); ????Test t2(3,4); ????? ????Test t3; ????//全局函數方法 ????t3 = t1.TestAdd(t2); ????? ????//成員函數方法 ????{ ????????Test t4 = t1.TestAdd(t2);//匿名對象直接轉化為t4 ????????t4.printT(); ????????Test t5; ????????t5 = t1.TestAdd(t2);//匿名對象復制給t5 ????????t5.printT(); ????} ????? ????? ????return 0; } |
函數返回引用,實例代碼:
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include<iostream> using namespace std; ? class Test { public: ????int a; ????int b; public: ????~Test() ????{ ????????cout << "析構函數:" << "a:" << a << "b:" << b <<endl; ????} ?????????//t1.TestAdd(t2) ?????????//返回一個引用,相當于返回自身 ?????????//返回t1這個元素,this就是&t1 ????Test& TestAdd(Test &t2) ????{ ????????this->a=this->a+t2.a; ????????????????this->b=this->b+t2.b; ????????return *this;//*(&t1)又回到了t1元素 ????} ????? ????Test(int a=0,int b=0) ????{ ????????this->a = a; ????????this->b = b; ????} ????void printT() ????{ ????????cout << "a:" << a << "b:" << b <<endl; ????} } ? //把成員函數 轉成 全局函數 多了一個參數 void printT(Test *pt) { ????cout << "a:" << pt->a << "b:" << pt->b <<endl; } //全局函數的方法 //全局函數 轉成 成員函數 少了一個參數 Test TestAdd(Test &t1,Test &t2) { ????Test tmp; ????return tmp; } ? int main() { ????Test t1(1,2); ????Test t2(3,4); ????? ?????????//t1=t1+t2; ????t1.TestAdd(t2); ????????t1.printT();??? ????? ????return 0; } |
總結
以上是生活随笔為你收集整理的C++之全局函数和成员函数互相转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种用函数指针方式来访问类成员函数的方法
- 下一篇: 在C++的类中封装多线程