Sobrecarga do operador de incremento / decremento

Operador de incremento ++, operador de decremento - existem pontos anteriores / posteriores. Para distinguir se o operador sobrecarregado é um operador anterior ou posterior, C ++ estipula:
O operador anterior está sobrecarregado como um operador unário
//重载为成员函数时
T & operator ++()
T & operator --()
//重载为全局函数时
T & operator ++ (T&)
T & operatot -- (T&)
O operador post está sobrecarregado como um operador binário e escreve mais um parâmetro inútil
//重载为成员函数时
T & operator ++(int n)
T & operator --(int n)
//重载为全局函数时
T & operator ++(T &,int n)
T & operator --(T &,int n)
Mas quando não há sobrecarga pós-operador, mas sobrecarga pré-operador, no VS, obj ++ também chama a pré-sobrecarga, no dev, o erro de compilação obj ++
class CDemo{
    
    
    int n;
    public:
    CDemo(int i=0):n(i){
    
    }
    CDemo operator++(int);//后置
    CDemo &operator++();//前置
    friend CDemo operator--(CDemo &, int);//全局后置
    friend CDemo &operator--(CDemo &);//全局前置
    friend ostream & operator<<(ostream &os,const  CDemo &d);
};
ostream &operator <<(ostream & os,const CDemo & d){
    
    
    os << d.n;
    return os;
}
CDemo CDemo::operator++(int){
    
    //成员后置
    CDemo tmp(*this);
    n++;
    return tmp;
}
CDemo & CDemo::operator++(){
    
    //成员前置
    n++;
    return *this;
}
CDemo operator--(CDemo & d,int){
    
    //全局后置
    CDemo tmp(d);
    d.n--;
    return tmp;
}
CDemo & operator--(CDemo & d){
    
    //全局前置
    d.n--;
    return d;
}

int main() {
    
    
    CDemo d(5);
    cout << (d++) << ',';//等价于d.operator++(0),成员
    cout << d << ',';
    cout << (++d) << ',';//等价于d.operator++(),成员
    cout << d << ',';
    cout << endl;
    cout << (d--) << ',';//等价于operator--(d,0),全局
    cout << d << ',';
    cout << (--d) << ',';//等价于operator--(d),全局
    cout << d << ',';
    cout << endl;
    return 0;
}
Ao escrever a sobrecarga do operador <<, encontrei um problema, ou seja, a referência do segundo parâmetro para CDemo deve ser uma referência constante, e compilada sem const.No entanto, o uso de dev é um pouco confuso.
ostream &operator <<(ostream & os,CDemo & d){
    
    
    os << d.n;
    return os;
}

Acho que você gosta

Origin blog.csdn.net/weixin_43311695/article/details/106701319
Recomendado
Clasificación