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;

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值