Modernes C++ programmieren

Okt 23, 2024

lst-0311-book.cpp

// https://godbolt.org/z/T1ohsxbje 
#include <string>
#include <iostream>                    // ostream, cout
namespace plant {
    class Baum {
        std::string name_;
    public:
        explicit Baum(const std::string_view name) : name_{name} {}
        void print(std::ostream& os) const { os << name_; }
    };
    std::ostream& operator<<(std::ostream& os, const Baum& arg)
        { arg.print(os); return os; }
    using NadelBaum = Baum;            // für spätere Erweiterungen …
    using LaubBaum = Baum;             // … vorsorgen
    namespace beispielnamen {          // eingebetteter Namensraum
        std::string eicheName = "Eiche";
        std::string bucheName = "Buche";
        std::string tanneName = "Tanne";
    } // Ende namespace beispielnamen
} // Ende namespace plant

int main() {  // main darf nicht in einem Namespace stehen
    using namespace plant::beispielnamen; // alle Beispielnamen verfügbar machen
    plant::NadelBaum tanne{ tanneName };
    plant::LaubBaum eiche{ eicheName };
    tanne.print(std::cout); std::cout << "\n";
    using plant::operator<<;           // ohne geht 'cout << eiche' nicht
    std::cout << eiche << "\n";
}