c++复习要点

   自增和自减运算符有前缀和后缀两种形式,都会改变对象,所以不能对常量对象操作。 前缀形式返回改变后的对象,返回*this。 后缀形式返回改变之前的值,所以必须创建一个代表这个值的独立对象并返回它,是通过传值方式返回的。 如何区分前缀和后缀形式呢? 后缀形式的自增和自减比前缀形式多一个int参数,这个参数在函数中并不使用,只是作为重载函数的标记来区分前缀和后缀运算。例如,对Byte类对象b,编译器看到++b,会调用Byte::opeartor++(), 而b++会调用Byte::operator++(int)。 如果要重载自增和自减运算符,一般应同时定义自增、自减运算符的前缀式和后缀式。重载运算符的行为应尽量与内置运算符保持一致。

  赋值运算符operator= 只能用成员函数重载。

#include <iostream>
using namespace std;
class MinInt {
    char b;
public:
    MinInt(char ch = 0) : b(ch) {};
    MinInt operator-( )const{  //一元运算"-"
        cout<<"MinInt::operator-"<<endl;
        return MinInt(-b);
    }
    MinInt operator+(const MinInt& rv)const {//二元运算 +
        cout << "MinInt::operator+" << endl;
        return MinInt(b + rv.b);          //返回值优化
    }
    MinInt&  operator+=(const MinInt& rv){//复合赋值运算 +=  这里不能加const,const表示的是不变的
        cout << "MinInt::operator+=" << endl;
        b += rv.b;
        return *this;
    }
}; //end of class MinInt

_

#include <iostream>
#include <cassert>
using namespace std;
class MinInt{
    char m;
public:
    MinInt(int val = 0){            //int类型转换为MinInt
        assert(val>=0 && val<=100); //要求取值范围在0~100之间
        m = static_cast<char>(val); //这不是将int强制转换成char么
    }
    operator int(){                //MinInt对象转换为int 类型
        return static_cast<int>(m);
    }
};
int main(){
    MinInt mi(10), num;
    num = mi + 20;                  /*首先将mi转换为int类型,再执行加法运算;
                                    再将int类型的计算结果30 转换为赋值左边的MinInt 类型 */
    int val = num;                  //将num自动转换为int,并赋值给val
    cout<< mi << '\t' << num << '\t' << val;
                                    //num 和mi 转换为int输出
}

_

猜你喜欢

转载自www.cnblogs.com/cunyusup/p/9033341.html