请高手进来看看!一个蛮难的问题!-----100分 Polyn Polyn::operator +(const Polyn& x) const{Polyn a;//一些其他的操作return a;}你这样重载的作用何在????还有你返回的只是一个局部变量,,当函数返回的时候,,变量a就离开了自己的作用域,,不出错才怪哪。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为我要把两个类中链表的数据以我要求的规则组合起来,再生成一个新的Polyn变量,就相当与a=3*4+4*4这样啦. 不好意思,我找到答案了,我重载的时候只要Polyn& operator+(const Polyn& x) const;就行啦!!!! 哦??偶有点不解按照你的写法,也就是说现在你返回的(Polyn&)是对一个局部变量(a)的引用对吧??而你的等号重载函数需要的正是这样一个对变量的引用。。这样就满足了等号重载的那个函数,,可是虽然你的局部变量a后来也没有起到作用,那为什么就可以返回对一个局部变量的引用并且将之赋给了另一个变量那???偶猜想可能是因为返回的时候,因为等号的需要,,函数临时再建立一个临时变量来保存局部变量a的值,然后a就析构掉,,再依靠着临时变量的引用等号重载就给另一个变量赋了值。所以你的程序也就ok了不知道具体是怎样的??谁来告诉偶吧:)你说那?? 我忘记了一点,就是在声明定义下面的函数的时候,我要定义局部变量为static, 然后再在完成入a=b+c后把a用其他方法copy掉。Polyn Polyn::operator +(const Polyn& x) const{static Polyn a;a.Erase();// 把它还原成空的。//一些其他的操作return a;}这样的话还有一点问题,就是不能,用于两个线程可能同时调用operator+,这就会导致对Polyn对象的误用,所以还望大家给与完美的方法! 晕了~~~~~让偶对C++的认识越来越模糊了。。hehe。本来就不应该返回局部变量的引用嘛。偶觉得你的函数也不要用static变量的好啊可以还是返回一个局部变量,这样在表达式计算的时候应该会生成一个临时变量用于等号计算然后等号重载的参数不要用引用(因为偶觉得对临时变量的引用是不合理的,不知道到底如何??希望大家赐教),,这样应该可以吧???小弟对C++的认识还很肤浅,,大家多多指教。//bow。 我觉得是这样,如果是静态局部变量的话,则是放在内存全局数据区,函数结束时并不解析,始终驻留直到程序运行结束。因此在两个线程同时调用operator+时,会导致Polyn对象的误用。 以下是\VC98\MFC\Include\AFXWIN1.INL中源码:_AFXWIN_INLINE CRect CRect::operator+(LPCRECT lpRect) const { CRect rect(this); rect.InflateRect(lpRect); return rect; } 想想CString的加操作,它不可能利用被加的CString的字符存储空间。所以你在加的内部new一个PolynNode指针,相当于一份拷贝,因为你是连表结构,在清除的时候不会有漏掉的内存。 如Cline(元元)举的例子偶觉得就是应该返回局部变量,,而不是static变量。然后在等号重载的参数去掉&........ 自绘一个有删除功能的combobox 用VC读写EXCEL有没有好用点的类, MFC 获取鼠标移入某控件消息的问题 ******** COleDateTime::GetCurrentTime 出现异常,是怎么回事呀 ********** MFC 中的全局对象 theApp 是怎样传入 WinMain 函数的。。 COM+服务端组件怎样得到客户端的信息? 高手指点:怎样用程序动态的让ie打开多个指定网页 请问我该用哪种IPC机制? 关于交换机的疑问? two easy problems 我的窗口怎么处理不了方向键消息? 为什么会这样呢?关不掉的对话框
偶有点不解
按照你的写法,也就是说现在你返回的(Polyn&)是对一个局部变量(a)的引用
对吧??而你的等号重载函数需要的正是这样一个对变量的引用。。这样就
满足了等号重载的那个函数,,可是虽然你的局部变量a后来也没有起到作
用,那为什么就可以返回对一个局部变量的引用并且将之赋给了另一个变量那???偶猜想可能是因为返回的时候,因为等号的需要,,函数临时再建立一个
临时变量来保存局部变量a的值,然后a就析构掉,,再依靠着临时变量的引用
等号重载就给另一个变量赋了值。所以你的程序也就ok了不知道具体是怎样的??谁来告诉偶吧:)你说那??
Polyn Polyn::operator +(const Polyn& x) const
{static Polyn a;
a.Erase();// 把它还原成空的。
//一些其他的操作
return a;
}
这样的话还有一点问题,就是不能,用于两个线程可能同时调用operator+,这就会导致对Polyn对象的误用,所以还望大家给与完美的方法!
本来就不应该返回局部变量的引用嘛。偶觉得你的函数也不要用static变量的好啊
可以还是返回一个局部变量,这样在表达式计算的时候应该会生成一个临时
变量用于等号计算然后等号重载的参数不要用引用(因为偶觉得对临时
变量的引用是不合理的,不知道到底如何??希望大家赐教),,这样应该可以吧???小弟对C++的认识还很肤浅,,大家多多指教。//bow。
函数结束时并不解析,始终驻留直到程序运行结束。因此在两个线程同时
调用operator+时,会导致Polyn对象的误用。
{
CRect rect(this);
rect.InflateRect(lpRect);
return rect;
}