值传递,指针传值以及引用传值的区别

将对象作为参数传递给函数有三种情况,分 别为:

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; 
}
/***************************************************************/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值