C ++ множественная перегрузка операторов - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу перегрузить некоторые операторы несколько раз, и я не уверен, как это сделать. У меня есть класс

, например

int main(){
    addClass c1;
    addClass c2;
    addClass c1 = (c2 + 10 * c2 + 2 * c3)*c3; 
}

Моя проблема в том, что я не знаю, как сделайте так, чтобы множество опреаторов перегрузилось, я имею в виду, что мне нужно вернуть в ordear, чтобы он перешел к следующему опреатору? Я пробовал это

    class addClass 
    //declration
        friend addClass & operator*(const double, const addClass &);

    addClass & operator*(double x, const addClass & a1)
    {
        int i;
        addClass add(a1.rank);
    add.res=x*a1.res
        }
        return res;
    }

, но для следующих операторов я столкнулся с некоторыми проблемами, поэтому я хотел знать, что делать

Спасибо!

1 Ответ

1 голос
/ 27 апреля 2020

Порядок оценки такой же, как обычно, даже для перегруженных операторов, поэтому в этом примере, где я добавил печать в операторах ...

#include <iostream>

class addClass {
public:
    addClass() : addClass(0) {}

    // converting constructor
    addClass(int x) : value(x) {}

    addClass& operator+=(const addClass& rhs) {
        value += rhs.value;
        return *this;
    }
    addClass& operator-=(const addClass& rhs) {
        value -= rhs.value;
        return *this;
    }    
    addClass& operator*=(const addClass& rhs) {
        value *= rhs.value;
        return *this;
    }
    addClass& operator/=(const addClass& rhs) {
        value /= rhs.value;
        return *this;
    }

    int getValue() const { return value; }
private:
    int value;
};

std::ostream& operator<<(std::ostream& os, const addClass& ac) {
    return os << ac.getValue();
}

addClass operator+(addClass lhs, const addClass& rhs) {
    std::cout << lhs << '+' << rhs << '=';
    lhs += rhs;
    std::cout << lhs << '\n';
    return lhs;
}
addClass operator-(addClass lhs, const addClass& rhs) {
    std::cout << lhs << '-' << rhs << '=';
    lhs -= rhs;
    std::cout << lhs << '\n';
    return lhs;
}
addClass operator*(addClass lhs, const addClass& rhs) {
    std::cout << lhs << '*' << rhs << '=';
    lhs *= rhs;
    std::cout << lhs << '\n';
    return lhs;
}
addClass operator/(addClass lhs, const addClass& rhs) {
    std::cout << lhs << '/' << rhs << '=';
    lhs /= rhs;
    std::cout << lhs << '\n';
    return lhs;
}

int main(){
    addClass c1;
    addClass c2 = 100;
    addClass c3 = 2;
    c1 = (c2 + 10 * c2 / 2 * c3)*c3;
}

... вы получите этот вывод :

10*100=1000
1000/2=500
500*2=1000
100+1000=1100
1100*2=2200
...