module;
#include <print>

export module Demo;

export class Demo
{
    int data;               // Beliebige Eigenschaft
public:
    // ctor
    Demo(int d): data(d)
    {}
    // Kopiert das uebergebene Objekt
    void Copy(const Demo& toCopy)
    {
        // Wenn Kopiervorgang auf sich selbst,
        // nur eine Meldung ausgeben
        // Hier wird der this-Zeiger verwendet, da die
        // Definition der Copy()-Funktion
        //   void Copy(this Demo& self, const Demo& toCopy)
        // standardmäßig zwei Objekte vergleichen wuerde und
        // nicht zwei Adressen. Wie Objekte verglichen werden
        // koennen folgt spaeter noch
        if (&toCopy == this)
        {
            std::println("Kein kopieren notwendig");
        }
        else
        {
            // Objekt kopieren und Meldung ausgeben
            data = toCopy.data;
            std::println("Wert kopiert");
        }
    }
};
