#include #include using namespace std; struct Bruch { int z{}; // der Zaehler, Default-Wert 0. Eine leere Klammer {} macht das! int n{1}; // der Nenner, sollte nicht 0 sein! Defaultwert 1 }; void operator<<(ostream& os, Bruch b) { os << '(' << b.z << '/' << b.n << ')'; } /* Die C++-Operatoren als Funktion geschrieben a + b; <-> operator+(a, b) cout << a; <-> operator<<(cout, a) a = b <-> operator=(a, b) a == b <-> operator==(a, b) a[0] <-> operator[](a, 0) print(a) <-> operator()(print, a) */ Bruch operator+(Bruch a, Bruch b) { return {a.z*b.n + a.n*b.z, a.n*b.n}; } // da Bruch return-Typ ist, genügt die Initialisierung int main() { Bruch a{1, 2}, b{3}; cout << a << " + " << b << " = " << a+b << '\n'; return EXIT_SUCCESS; }