解析:成员函数会用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;
}