日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++之全局函数和成员函数互相转换

發布時間:2025/3/21 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++之全局函数和成员函数互相转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。