解析:成員函數會用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; }
函數返回元素,實例代碼:
#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; }
函數返回引用,實例代碼:
#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; }