2016-06-16 1 views
0

я хочу перегружать оператор + для работы как на side.When я использовать оператор + я хочу, чтобы подтолкнуть элемент в вектор класса .Здесь мой код:оператор + перегрузки левый и правый

template<typename TElement> 
class grades { 
private: 
    vector<TElement> v; 
public: 
    grades& operator+(const int& a) { 
     v.push_back(a); 
     return *this; 
    } 
    grades& operator=(const grades& g) { 
     v = g.v; 
     return *this; 
    } 
    friend grades& operator+(const int& a,const grades& g) { 
     //here i get some errors if i put my code 
     return *this; 
    } 
}; 
int main() { 
    grades<int> myg; 
    myg = 10 + myg; // this operation i want 
    myg = myg + 9; //this work 
    return 0; 
} 
+5

'' оператор + не должен изменять либо из операндов. Он должен возвращать только что созданный объект, представляющий их сумму (что бы это ни значило для вашего типа). Вместо этого рассмотрим 'operator + ='. –

+0

В чем вопрос? Вы забыли спросить :) –

ответ

0

оператор + должен возвращать копию

template<typename TElement> 
class grades { 
private: 
    vector<TElement> v; 
public: 
    grades operator+(const TElement& a) const { 
     grades ret(*this); 
     ret.v.push_back(a); 
     return ret; 
    } 
    friend grades operator+(const TElement& a,const grades& g) { 
     return g+a; 
    } 
}; 
int main() { 
    grades<int> myg; 
    myg = 10 + myg; // this operation i want 
    myg = myg + 9; //this work 
    return 0; 

} 
0

operator+ означает копия. operator+= подразумевает мутацию на месте.

это, вероятно, более идиоматических:

#include <vector> 
using namespace std; 

template<typename TElement> 
class grades { 
private: 
    vector<TElement> v; 
public: 
    grades& operator+=(int a) 
    { 
    v.push_back(a); 
    } 
    // redundant 
// grades& operator=(const grades& g) { 
//  v = g.v; 
//  return *this; 
// } 

    friend grades operator+(grades g, const int& a) { 
     g += a; 
     return g; 
    } 
    friend grades operator+(const int& a,grades g) { 
    g.v.insert(g.v.begin(), a); 
    return g; 
    } 
}; 
int main() { 
    grades<int> myg; 
    myg = 10 + myg; // this now works 
    myg = myg + 9; //this work 
    return 0; 
}