Chinaunix

标题: 一个运算符重载问题. [打印本页]

作者: Allen1981    时间: 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呀.
作者: liunux    时间: 2003-01-20 18:28
标题: 一个运算符重载问题.
执行的顺序是从右到左的。所以先执行++c1在执行c1++。
作者: Allen1981    时间: 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;
}
作者: 无双    时间: 2003-01-20 21:10
标题: 一个运算符重载问题.
这主要是看编译器
编译时的语法顺序了

是从右向左还是从左到右

一般这种语法影响程序的可读性
所以不应该写




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2