将对象作为参数传递给函数有三种情况,分 别为:
fun1(ABC p) {……}/ / 值 方 式
fun2(ABC *p) {……}//指针方式
fun3(ABC &p){……}//引用方式
int main()
{
ABC p1,p2,p3;
……
fun1(p1);//以“值方式”传递对象,p1不被修改
fun2(&p2);//以“指针方式”传递对象,p2被修改
fun3(p3);//以“引用方式”传递对象,p3被修改
}
/*********************“值方式”传递对象: ***************************/
对形参对象的任何修改不会影响到实参对象本身
class Tr{
int i;
public:
Tr(int n)
{
i=n;
}
void set(int n)
{
i = n;
}
int get()
{
return i;
}
};
void Sqr(Tr ob)
{
ob.set(ob.get()*ob.get());
cout<<"ob.i="<<ob.get()<<endl;
}
int main()
{
Tr obj(10);
Sqr(obj);
cout<<"obj.i="<<obj.get()<<endl;
}
/*****************************************************************/
/***************************** 指针方式 传递参数 ****************************/
对形参对象的任何修改 将会影响到实参对象
class Tr
{
int i;
public:
Tr(int n)
{
i=n;
}
void set(int n)
{
i=n;
}
int get()
{
return i;
}
};
void Sqr(Tr *ob)
{
ob->set(ob->get()*ob->get());
cout<<"ob.i="<<ob->get()<<endl;
}
int main()
{
Tr obj(10);
Sqr(&obj);
cout<<"obj.i="<<obj.get()<<endl;
}
/**************************************************************/
/********************** 引用方式 传递参数 *********************/
对形参对象的任何修改 将会影响到实参对象
class Tr {
int i;
public:
Tr(int n)
{
i = n;
}
void set (int n)
{
i = n;
}
intget ()
{
return i;
}
};
void Sqr (Tr &ob)
{
ob.set(ob.get()*ob.get());
cout<<"ob.i="<<ob.get()<<endl;
}
int main ()
{
Tr obj(10);
Sqr(obj);
cout<<"obj.i="<<obj.get()<<endl;
}
/***************************************************************/