【C++】一道c++填空题,关于类和对象

有函数定义:voidPrintPoint(CPointp){cout<<p.x<<','<<p.y;};运行语句:CPointp;p.x=p.y=4;PrintPoint... 有函数定义:void PrintPoint(CPoint p){cout<<p.x<<','<<p.y;};
运行语句:CPoint p;p.x=p.y=4;PrintPoint(p);会创建--------个对象。
函数定义修改为:void PrintPoint(CPoint&p){cout<<p.x<<','<<p.y;};
运行同样的语句将创建-------个对象

跪求大神给出详解~~~
展开
 我来答
bladeLd
2013-01-08 · TA获得超过110个赞
知道答主
回答量:123
采纳率:100%
帮助的人:72.1万
展开全部
引用不是传值,不会创建对象:
【void PrintPoint(CPoint&p){cout<<p.x<<','<<p.y;};】——>调用时形参引用实参,不会创建对象
【void PrintPoint(CPoint p){cout<<p.x<<','<<p.y;};】——>调用时值传递,实参调用拷贝构造函数初始化形参。
追问
值传递的时候会不会创建对象?创建对象在什么情况下进行?
追答
值传递的时候会创建【形参】这个对象,形参只有在调用了这个函数是才会创建的。  并且你的调用函数是void PrintPoint(CPoint p),那么调用PrintPoint时,首先是创建形参,然后才会进入函数。创建形参的过程:编译器调用CPoint类的拷贝构造函数,并将实参作为拷贝构造函数的形参,这样形参就这个对象就构造完成,并且是实参的副本。
拷贝构造函数:在C++ Primer里面称之为赋值构造函数,是类的复制控制三个成员函数之一,构造函数顾名思义和类同名,如果没有显示定义,编译器将默认合成一个。就你的CPoint类而言其形式为:

CPoint(const CPoint& );
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式