请问我的这个操作符重载错在哪?谢谢

wonxlei 2007-01-16 08:54:02
我写了个比较算符的优先级,但是好象有错误,请大家帮忙看看这个重载的操作符。
谢谢;
bool operator>(string &s1,string &s2)
{
if(s1 =="!"&& s2!="!")
return true;
else if((s1=="*"||s1=="/")&&(s2 !="!")&&(s2!="*")&&(s2!="/"))
return true;
else if((s1=="+"||s1 =="-")&&(s2!="!")&&(s2!="*")&&(s2!="/")&&(s2!="+")&&(s2!="-"))
return true;
else if(((s1==">")||(s1=="<")||(s1==">=")||(s1=="<=")||(s1=="==")||(s1=="!="))&&((s2=="&&")||(s2=="||")))
return true;
else return false;
}
...全文
223 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DraculaW 2007-01-19
  • 打赏
  • 举报
回复
是啊 返回值一样是合法的行为啊

你可以
case "*":
case "/": //一个级别的运算符一个return 就好了么 或者 为了使obj文件变小 你可以 用个short p存优先级的数字然后 goto到最下方 然后return p; 呵呵
wonxlei 2007-01-16
  • 打赏
  • 举报
回复

int pri(string &s){
switch(s){
case "": return 0;
..............
// and so on
}
}但是假如有2个相同的优先级,那CASE语句的值难道一样吗?
比如*,/这2个算符的 pri函数返回值一样的?
wonxlei 2007-01-16
  • 打赏
  • 举报
回复
DraculaW(成爲牛人,然後離開)
谢谢
明白了!
wonxlei 2007-01-16
  • 打赏
  • 举报
回复
呵呵,我也感觉我也没说清楚
但是我还真的不知道怎么说了
自己再仔细查查了!
taodm 2007-01-16
  • 打赏
  • 举报
回复
算了,楼主,你自己再认真看看编译出错提示吧。你连提问都不会呀。
DraculaW 2007-01-16
  • 打赏
  • 举报
回复
Err 最好的方法 是在里面再来个inline函数 里面使用switch判断出两个操作的优先级 然后再比较两个数字 呵呵 这样子逻辑比较清楚

int pri(string &s){
switch(s){
case "": return 0;
..............
// and so on
}
}

bool operator>(string &s1,string &s2){
int i = pri(s1);
int j = pri(s2);
return i > j;
}
wonxlei 2007-01-16
  • 打赏
  • 举报
回复
我写的程序是将中缀式化为逆波兰式
上面写的是比较算符的优先级。
wonxlei 2007-01-16
  • 打赏
  • 举报
回复
我要比较
{"&&","||",">",">=","<","<=","!=","==","+","-","*","/","!"};
这里面的各算符的优先级

想请教的是:
这样重载是对的?(虽然我改变了操作符本身的含义)
zhp831221 2007-01-16
  • 打赏
  • 举报
回复
操作符重载最好不要改变操作符本身的意思
taodm 2007-01-16
  • 打赏
  • 举报
回复
啥错啊?
你这要实现啥功能啊?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧