当前位置:编程学习 > C/C++ >>

第14章 重载操作符与转换(6)

14.7 自增操作符和自减操作符
1. 定义自增/自减操作符
C++语言不要求自增操作符或自减操作符一定作为类的成员,但是,因为这些操作符改变操作对象的状态,所以更倾向于将它们作为成员。
2. 定义前自增/前自减操作符
为了与内置类型一致,前缀操作符应返回被增量或减量对象的引用。

class CheckedArr 

public: 
    CheckedArr(int *b, int *e):beg(b),end(e),cur(b){} 
    CheckedArr &operator++() 
    { 
        if(end!=cur) 
        { 
            ++cur; 
            return *this; 
        } 
        else 
            throw out_of_range("out of range"); 
    } 
    CheckedArr &operator--() 
    { 
        if(beg!=cur) 
        { 
            --cur; 
            return *this; 
        } 
        else 
            throw out_of_range("out of range"); 
    } 
private: 
    int *beg; 
    int *end; 
    int *cur; 
}; 
3. 区别操作符的前缀和后缀形式
后缀操作符函数接受一个额外的(即无用的)int型形参。这个形参不是后缀式操作符的正常工作所需要的,它的唯一目的是使后缀函数与前缀函数区别开来。
4.定义后缀式操作符
为了与内置操作符一致,后缀式操作符应返回旧值(即,尚未自增或自减的值),并且,应作为值返回,而不是返回引用。

CheckedArr operator++(int) 

    CheckedArr ret(*this); 
    ++(*this); 
    return ret; 

CheckedArr operator--(int) 

    CheckedArr ret(*this); 
    --(*this); 
    return ret; 

因为通过前缀版本实现这些操作符,不需要检查curr是否在范围之内,那个检查以及必要的throw,在相应的前缀式操作符中完成。
因为不使用int形参,所以没有对其命名。
5. 显式调用前缀式操作符
可以显式调用重载操作符而不是将它作为操作符用在表达式中。如果想要使用函数调用来调用后缀式操作符,必须给出一个整型实参值。
所传递的值通常被忽略,但该值是必要的,用于通知编译器需要的是后缀式版本。
一般而言,最好前缀式和后缀式都定义。只定义前缀式或只定义后缀式的类,将会让习惯于使用两种形式的用户感到奇怪。

摘自 xufei96的专栏

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,