Van ez a cseppnyi kód:
#include <iostream>
using namespace std;
class f
{
public:
f() { v = 0; }
f(int a) :v(a) {};
const f& operator=(int a) { v = a; return *this; }
const f& operator+=(const f& m) { v += m.v; return *this; }
int getv() const { return v;};
private:
int v;
};
void main()
{
f test;
test = 1;
test += 5; // this works without f::operator+=(int) !
cout << "so test is = " << test.getv() << endl; // prints '6'
}
Nekem érdekesnek tűnik, hogy a fordítónak nem okoz gondot, hogy hozzáadja az '5'-t anélkül, hogy lenne hozzá megfelelő operátor-túlterhelés. Debug-ban végigmenve kiderül, mit is csinál a vs2013c++ fordítója:
csinál egy temporális 'f' példányt, majd meghívja neki az op=(int) fv-jét, így értéke 5 lesz, majd ezt hozzáadja a 'test' példányhoz az op+=(const f&) segítségével.
Azaz rájött, hogy a meglévő függvényekkel meg tudja oldani a feladatot. Szerintem durva, hogy ilyenre rájön.