Olkoon meillä vaikkapa luokka, joka kuvaa hyvin usein vastaan tulevaa tilannetta, jossa käytössä onkin hyvin rajoitettu kokonaislukualue (esim. kellon minuutit [0,59[, tunnit [0,24[ jne.):
#include <iostream.h>
class cRajoitettu {
int arvo;
int raja;
public:
int aseta(int aarvo) {
arvo = aarvo;
int yli = arvo/raja;
arvo %= raja;
return yli;
}
cRajoitettu(int aarvo, int araja) {
raja = araja; if ( raja < 1 ) raja = 1;
aseta(aarvo);
}
int Arvo() const { return arvo; }
int Raja() const { return raja; }
};
ostream &operator<<(ostream &os, const cRajoitettu &r) {return os << r.Arvo(); }
cRajoitettu operator+(const cRajoitettu &r1, int i)
{
return cRajoitettu(r1.Arvo()+i,r1.Raja());
}
int operator+(int i,const cRajoitettu &r2)
{
return i+r2.Arvo();
}
int main(void)
{
cRajoitettu m1(55,60),m2(20,60);
int i;
cout << m1 << " " << m2 << "\n";
m2 = m1 + 20;
cout << m1 << " " << m2 << "\n";
i = 20 + m2;
cout << i << "\n";
return 0;
}
Tässä ensimmäinen + - operaattori voitaisiin tehdä
myös luokan metodiksi:
#include <iostream.h>
class cRajoitettu {
...
cRajoitettu operator+(int i) { return cRajoitettu(arvo+i,raja); }
};
Tämä näyttää yksi- parametriselta operaattorilta,
mutta on tosiasiassa binäärinen, nimittäin vasempana operandina
on *this.
m2 = m1.operator+(20);