类成员函数和全局函数的对比:
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;
}