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);