cpp2html 0.1-alpha © 2002 Andrea Leofreddi. To get the source click here

// 6.2: overloading (metodo e funzioni)
#include <iostream>

using namespace std;

class Prova {
	private:
		int dato;

	public:
		// metodi per l'accesso a dato
		int get_dato() { return dato; };
		void set_dato(int ndato) { dato = ndato; };

		// overloading degli operatori
		const Prova &operator<<(int op) {
			cout << "Invocato operator<< metodo\n";
			dato += op;
		}

		const Prova operator+(int a) {
			Prova r(*this);

			cout << "Invocato operator+ metodo\n";
			r.dato += a;

			return r;
		}
		
		const Prova operator+=(int a) {
			Prova r(*this);

			cout << "Invocato operator+= metodo\n";
			
			r.dato += a;
			return r;
		}
		
		Prova()
		: dato(0) { };
};

const Prova operator+(int op, const Prova &a) {
	Prova r(a);

	cout << "Invocato operator+ funzione\n";
	r.set_dato(r.get_dato() + op);

	return r;
}

int main() {
	Prova a, b;

	a << 3;

	b = a + 1;

	b = 1 + b; // invoca la funzione operator+(int, Prova)
	b = b + 1; // invoca il metodo Prova::operator+(int)
	b += 1; // invoca il metodo Prova::operator+=(int)

	cout << "a.dato vale " << a.get_dato() << endl;
	cout << "b.dato vale " << b.get_dato() << endl;
}