Modernes C++ programmieren

Okt 23, 2024

lst-0441-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/Wvr3aK75G 
#include <compare>              // für <=>
class Value {
    // Wenn Sie class verwenden, geht es mit Privatem los.
    int value_; 
public:
    explicit Value(int value) : value_{value} {}

    // freie Funktionen, aber als friend deklariert
    friend Value operator+(const Value& li, const Value& re);
    friend Value operator-(const Value& li, const Value& re)
        { return Value{li.value_ - re.value_};  // innerhalb auch definiert
    }
    // operator<=> braucht nicht friend zu sein.
    // für alle Vergleiche: <, >, <=, >= sowie == und !=
    auto operator<=>(const Value& re) const = default; 
};

// Definition der zuvor deklarierten friend-Funktion:
Value operator+(const Value& li, const Value& re) {
    return Value{li.value_ + re.value_}; // Zugriff auf Privates erlaubt
}

int main() {
    Value sieben{7}; Value drei{3}; Value zwei{2};
    if((drei+zwei) < sieben) {    // operator+, dann operarator< via <=>
        return 0;                 // okay
    } else {
        return 1;                 // etwas ist falsch gelaufen
    }
}