【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;};
运行同样的语句将创建-------个对象
跪求大神给出详解~~~ 展开
运行语句:CPoint p;p.x=p.y=4;PrintPoint(p);会创建--------个对象。
函数定义修改为:void PrintPoint(CPoint&p){cout<<p.x<<','<<p.y;};
运行同样的语句将创建-------个对象
跪求大神给出详解~~~ 展开
1个回答
展开全部
引用不是传值,不会创建对象:
【void PrintPoint(CPoint&p){cout<<p.x<<','<<p.y;};】——>调用时形参引用实参,不会创建对象
【void PrintPoint(CPoint p){cout<<p.x<<','<<p.y;};】——>调用时值传递,实参调用拷贝构造函数初始化形参。
【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& );
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询