Modernes C++ programmieren

Okt 23, 2024

lst-0470-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/WqfMGaP71 
#include <iostream>
class Schrauber;
class Ding {
    int value_; // privat
public:
    explicit Ding(int value) : value_{value} {}
    void inc() { ++value_; }
    std::ostream& print(std::ostream& os) const { return os<<value_; }
    friend class Schrauber;
};
class Schrauber {
    const Ding &ding_;
public:
    explicit Schrauber(const Ding &ding) : ding_{ding} {}
    auto dingWert() const {
        return ding_.value_;                   // Zugriff auf Privates aus Ding
    }
};
int main() {
    Ding ding{45};
    ding.print(std::cout) << '\n';             // Ausgabe: 45
    Schrauber schrauber{ding};
    ding.inc(); // internen Wert verändern
    std::cout << schrauber.dingWert() << '\n'; // Ausgabe: 46
}