c++函数参数为对象和为对象的引用类型时,作用一样吗

ClassA,B;voidshow(Ap,B&q);这个函数调用时候,PQ的使用有什么不同吗... Class A,B;
void show(A p,B &q);
这个函数调用时候,P Q的使用有什么不同吗
展开
 我来答
王天旻
推荐于2018-03-13 · 超过16用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:44.7万
展开全部
不一样,一个是复制传递,一个是引用传递。
复制传递时将对象复制一遍,在函数中的对象和原对象值相同,但是地址不同,函数中若修改对象的值,原对象不会受到影响,当函数执行完时,复制的对象会被销毁。
而引用传递不会复制,只是将原对象的地址传过去,类似指针。此时函数中的对象和原对象是一个东西,相同的地址,可能名字不一样而已。
一般传递对象时使用的是引用传递,效率更高。对象一般比较大,复制的话销毁的时间较多。如要防止函数修改参数,可以使用const 引用。
附个演示代码,你就知道了。
#include <iostream>
#include <conio.h>

using namespace std;

class A
{
public:
void set(int data)
{
this->data = data;
}
void show()
{
cout << data << endl;
}
private:
int data;
};

void change(A a,A &b)
{
a.set(3);
b.set(3);
}

int main()
{
A a,b;
a.set(1);
b.set(1);
cout << "befor change" << endl;
a.show();
b.show();
change(a,b);
cout << "after change" << endl;
a.show();
b.show();
getch();
return 0;
}
魔尊8
2010-05-19 · TA获得超过1125个赞
知道小有建树答主
回答量:535
采纳率:0%
帮助的人:571万
展开全部
当然会不同啊,p的值只在改函数里面会有所变化,函数调用一结束,p又回到之前的值,没有任何的改变,出淤泥而不染;而q就不同了,被感染了,它的值会保存起来,函数调用结束了,它就不再是刚开始调用的那个值了,而是调用之后的新值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
粒粒载亩
2015-09-20 · TA获得超过1.6万个赞
知道大有可为答主
回答量:1.7万
采纳率:73%
帮助的人:5296万
展开全部
作用当然是不一样的,前者是对源对象的赋值。
后者是对源对象的地址的赋值。
后者以指针的操作会影响到原来的对象,而前者不会。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
凌汉晨
2015-10-09 · TA获得超过266个赞
知道小有建树答主
回答量:294
采纳率:0%
帮助的人:68.7万
展开全部
传值相当于在函数内重新定义一个对象,把参数引用的对象赋值给这个新定义的对象。在函数内对对象的操作都是针对新定义的对象,函数退出后,新定义对象就不存在了。传址调用则没有定义新对象,函数内的操作就是对引用对象本身的操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秋天来了仔陈
2010-05-19 · TA获得超过2145个赞
知道小有建树答主
回答量:843
采纳率:0%
帮助的人:755万
展开全部
这么讲吧
void fun(int x,int y)
{
int tempt;
tempt=x;
x=y;
y=tempt;
}

void fun(int &x,int &y)
{
int tempt;
tempt=x;
x=y;
y=tempt;
}
不同,上一个没有交换成功,下一个交换成功了的,引用就是用别名,还是对那个数操作,不知听懂了吗。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式