一.值传递
函数中如果对对象进行了修改,对象的值不变;相当于创建对象的一个副本传递给函数
#include<iostream>
using namespace std;
class Test
{
public:
Test(int a){num=a;}
~Test(){}
void setNum(int a){num=a;}
int GetNum(){return num;}
private:
int num;
};
//值传递
void Add(Test t)
{
int x=t.GetNum()+t.GetNum();//值传递,相当于为num创建一个副本值为100
t.setNum(x);
cout<<t.GetNum()<<endl;
}
int main()
{
Test tt(100);
Add(tt);
cout<<tt.GetNum()<<endl;//原对象的值没有变化,变化的是NUM的副本
return 0;
}
二.地址传递
传递的是对象的地址,函数对对象的改变直接改变对象
#include<iostream>
using namespace std;
class Test
{
public:
Test(int a){num=a;}
~Test(){}
void setNum(int a){num=a;}
int GetNum(){return num;}
private:
int num;
};
//对象指针作为函数参数
void Add(Test *t)
{
int x=t->GetNum()+t->GetNum();//用t->,不能用t.
t->setNum(x);
cout<<t->GetNum()<<endl;
}
int main()
{
Test tt(100);
Add(&tt);
cout<<tt.GetNum()<<endl;
return 0;
}
三.引用传递
引用传递实际上就是给对象起了一个别名,当操作别名时实际上就是操作对象本身
#include<iostream>
using namespace std;
class Test
{
public:
Test(int a){num=a;}
~Test(){}
void setNum(int a){num=a;}
int GetNum(){return num;}
private:
int num;
};
//对象指针作为函数参数
void Add(Test *t)
{
int x=t->GetNum()+t->GetNum();//用t->,不能用t.
t->setNum(x);
cout<<t->GetNum()<<endl;
}
int main()
{
Test tt(100);
Add(&tt);
cout<<tt.GetNum()<<endl;
return 0;
}