免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1891 | 回复: 3
打印 上一主题 下一主题

一个运算符重载问题. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-01-20 17:34 |只看该作者 |倒序浏览
#include "iostream.h"
#include "iomanip.h"
class class_{
        int i;
public:
    class_(int _i=0):i(_i){}
        class_(class_ & obj){i=obj.i;}
       
        inline int  getout() const {return i;}
        inline void add(){i++;}
        inline void sub(){i--;}
       
        friend class_  operator ++(class_ &,int);
        friend class_  & operator ++(class_ & );
        friend ostream &amp; operator <<(ostream &amp;,class_ &amp;
};

class_ operator ++(class_ &amp; L ,int){
        class_ temp=L;
        L.add();

        return temp;
}

class_  &amp; operator ++(class_ &amp; R){
        R.add();

        return R;
}

ostream &amp; operator <<(ostream &amp; out,class_ &amp; obj){
        out<< obj.getout();
       
        return out;
}

void main(){

        class_ c1=10;
        class_ c2=c1;

        cout<<c1++<<endl
                <<c2++<<endl;
//                <<++c1<<endl
//                <<++c2<<endl;
}

问题是为何两次结果不一样,
一次是注释,答案是10,10是理想中的答案,但是......
一次是去掉注释,这时10 10的答案会变成11,11,12,12
我想应该是10,10,11,11呀.

论坛徽章:
0
2 [报告]
发表于 2003-01-20 18:28 |只看该作者

一个运算符重载问题.

执行的顺序是从右到左的。所以先执行++c1在执行c1++。

论坛徽章:
0
3 [报告]
发表于 2003-01-20 21:03 |只看该作者

一个运算符重载问题.

看看这个,
为何连续打印,
和分开个别打印效果不一样的?
#include "iostream.h"
#include "iomanip.h"
class class_{
        int i;
public:
    class_(int _i=0):i(_i){}
        class_(class_ &amp; obj){i=obj.i;}

       
        friend const class_ operator ++(class_ &amp; L,int);
        friend const class_ &amp; operator ++(class_ &amp; R);
        friend ostream &amp; operator <<(ostream &amp; out,const class_ &amp; obj);
};
const class_  operator ++(class_ &amp; L ,int ){
        class_ temp=L;
        L.i++;

        return temp;
}
const class_ &amp; operator ++(class_ &amp; R){
        R.i++;

        return R;
}
ostream &amp; operator <<(ostream &amp; out,const class_ &amp; obj){
        out<< obj.i;
       
        return out;
}

void main(){

        class_ c1=10;
        cout<<c1++<<endl
                <<++c1<<endl;
}

论坛徽章:
0
4 [报告]
发表于 2003-01-20 21:10 |只看该作者

一个运算符重载问题.

这主要是看编译器
编译时的语法顺序了

是从右向左还是从左到右

一般这种语法影响程序的可读性
所以不应该写
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP