一C++程序,不是很懂,请C++高手指点... complex& add(complex& x);说明是以引用形式传入参数;应用中tmp=c1.add(c2);c2是以引用形式传入的;若complex add(complex x);x是以值形式传入两种在这个程序中效果一样; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 musicdancer:能说的专业一点吗?complex& add(complex& x); 这里前一个complex是什么?是类还是类的构造函数?后一个complex呢? 前一个complex&说明的是以引用形式返回一个值后一个complex&说明的是以引用形式传入一个参数 你不明白的是什么?”这里前一个complex是什么?是类还是类的构造函数?“和构造函数有关系吗?add(complex& x); 有一个返回类型,这个返回类新型是complex类 严格来讲这是一个错误的程序。complex& complex::add(complex& x){ complex tmp; tmp.r=r+x.r; tmp.i=i+x.i; return tmp;}在返回时 tmp已经超过了生存期,当你在add()外使用它的返回值时,其实tmp已经不存在了,然而你用了指向tmp的指针。这是一种危险的行为。因为参与add的变量都不变,需要返回一个临时变量,应该:complex complex::add(complex& x){ complex tmp; tmp.r=r+x.r; tmp.i=i+x.i; return tmp;}这样是传值,就没危险了,但中间多了一个无名的变量,就多了构造和析构函数的调用,可以告诉c++要产生一个用于返回的临时变量:complex complex::add(complex& x){ return complex(r+x.r,i+x.i);}无论如何,不要返回局部变量的指针。参数用引用可以减少构造和析构函数的调用,add(complex x)就需要压栈整个对象,又需要对x的构造和析构函数的调用。 我同意bnj的說法,這係一個錯誤的程序 returning address of local variable or temporary 动态创建一个按钮,要如何做哪? Clistctrl在使用LVS_EX_HEADERDRAGDROP后交换列的位置后,索引值还还没有变化,怎样使索引值重排 对话框控件显示图片的问题 怎样实现像windows里附件“画图”点击新建与再次点击新建之间的处理。 Windows刚启动时,如何SoftICE接管系统,调试驱动的加载过程? 广域网上支持1到2个局域网连网 光盘触发的的问题? 高手帮忙啊! 用atl写了一个需要license的com object,在vb中怎么创建啊? 请问vc6与vc7的区别大吗?? vc++运行出错问题 子线程如何访问主线程的全局变量
能说的专业一点吗?complex& add(complex& x); 这里前一个complex是什么?是类还是类的构造函数?
后一个complex呢?
后一个complex&说明的是以引用形式传入一个参数
”这里前一个complex是什么?是类还是类的构造函数?“
和构造函数有关系吗?add(complex& x); 有一个返回类型,这个返回类新型是complex类
complex& complex::add(complex& x)
{
complex tmp;
tmp.r=r+x.r;
tmp.i=i+x.i;
return tmp;
}
在返回时 tmp已经超过了生存期,当你在add()外使用它的返回值时,其实tmp已经不存在
了,然而你用了指向tmp的指针。这是一种危险的行为。
因为参与add的变量都不变,需要返回一个临时变量,应该:
complex complex::add(complex& x)
{
complex tmp;
tmp.r=r+x.r;
tmp.i=i+x.i;
return tmp;
}
这样是传值,就没危险了,但中间多了一个无名的变量,就多了构造和析构函数的调用,
可以告诉c++要产生一个用于返回的临时变量:
complex complex::add(complex& x)
{
return complex(r+x.r,i+x.i);
}
无论如何,不要返回局部变量的指针。参数用引用可以减少构造和析构函数的调用,add(complex x)就需要压栈整个对象,又需要
对x的构造和析构函数的调用。