類成員函數和全局函數的對比:
1.類成員函數和全局函數的區別就是,一個是面向對象,一個是面向過程
2.類成員函數==(轉成)==>全局函數:增加一個參數,增加的這個參數是代替this指針的
3.全局函數==(轉成)==>類成員函數:減少一個參數,減少的這個參數通過this指針隱藏
4.這個例子是實現面向過程向面向對象轉變
具體代碼的實現如下:
Test.h
#ifndef __TEST_H__
#define __TEST_H__
class Test
{
public:
Test(int a, int b)
{
this->a = a;
this->b = b;
}
int getA()
{
return this->a;
}
int getB()
{
return this->b;
}
public:
Test add(Test &t);
private:
int a;
int b;
};
#endif // __TEST_H__
main.cpp#include <iostream>
#include "Test.h"
using namespace std;
// 類成員函數:只有一個參數,可以實現兩個對象的成員屬性相加
Test Test::add(Test &t)
{
Test tmp(this->a + t.getA(), this->b + t.getB());
// 這裏能夠返回tmp的值,原理是匿名對象實現的
return tmp;
}
// 全局函數:有兩個參數,實現兩個對象的成員屬性相加
Test add(Test &t1, Test &t2)
{
Test tmp(t1.getA() + t2.getA(), t1.getB() + t2.getB());
// 這裏能夠返回tmp的值,原理是匿名對象實現的
return tmp;
}
int main()
{
// 創建兩個類的實例
Test t1(1, 2);
Test t2(3, 4);
// 通過調用類成員函數,返回一個類的實例
Test t3 = t1.add(t2);
cout << t3.getA() << " " << t3.getB() << endl;
// 通過調用全局函數,返回一個類的實例
Test t4 = add(t1, t2);
cout << t4.getA() << " " << t4.getB() << endl;
cout << "func main end" << endl;
cin.get();
return 0;
}