Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Operaattoreiden ylikuormitus

Teuro [20.11.2007 19:59:33]

#

Kysymyksenä on luokan sisälle ohjelmoitu vertailuoperaattori. Tämä on helppoa, jos tehdään vain yksi vertailuoperaattori, mutta homma menee hankalaksi, koska haluan kuitenkin järjestellä oliovektorin ainakin kahdella eri tavalla.

class Jasen{
           private:
                  string nimi;
                  string osoite;
                  int ika;
           public:
                  Jasen(string n, string o, int i){
                    this -> nimi = n;
                    this -> osoite = o;
                    this -> ika = i;
           }

           bool operator < (const Jasen &i)const{
             return (nimi < i.nimi);
           }

           //Miten tehdään toinen tällainen?
};

kayttaja-2499 [20.11.2007 20:36:12]

#

Jos käytät STL:n vectoreita, viimeinen esimerkki seuraavalta sivulta:
http://www.cppreference.com/cppalgorithm/sort.html

Teuro [21.11.2007 06:53:36]

#

Jep noin se on nyt mun projektissa, mutta eikö ole mahdollista liittää luokkaan kuin yksi ylimäärittely? Ei se tietenkään haittaa, että tuo vertailufunktio on ulkopuolinen. Olisi vaan jotenkin selkeämpää, jos vertailut olisivat luokann sisällä.

Metabolix [21.11.2007 18:33:37]

#

No mistähän se kääntäjä tietää, minkä vertailun mukaan pitää vastata, kun kysytään, onko a < b? Ei mistään. Ei voi olla kuin yksi tuollainen operaattori tietylle tyyppiparille. Voit kuitenkin tehdä vertailufunktiosta staattisen jäsenen:

class A {
  int a, b;
public:
  static inline bool cmp_a(A const &a1, A const &a2) {
    return a1.a < a2.a;
  }
  static inline bool cmp_b(A const &a1, A const &a2) {
    return a1.b * a1.b < a2.b * a2.b;
  }
};
sort(va.begin(), va.end(), A::cmp_a);
sort(vb.begin(), vb.end(), A::cmp_b);

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta