Klassen (Delete)



  • ist es möglich dieses hier auszugeben:

    class Person
    {
    public:
    void Person::Ausgabe(int zahl)
    {
    cout << zahl << endl;
    cout << "hajhgiawslkjfgiawfjahw" << endl;
    }
    
    void Person::Ausgabe() = delete;
    };
    

    bevor die funktion Ausgabe gelöscht wird?



  • Das Löschen von Methoden passiert zur Kompilierzeit, die Frage macht also keinen Sinn.
    Was willst du denn erreichen?



  • asen schrieb:

    Das Löschen von Methoden passiert zur Kompilierzeit, die Frage macht also keinen Sinn.
    Was willst du denn erreichen?

    Achso oke danke

    Ich wollte meinen Text ausgeben lassen und danach die Funktion löschen 😕

    Jetzt versteh ich aber nicht wozu es diese delete funktion gibt...

    Ist es denn möglich den Wert einer Variable in der gleichen Klasse einer anderen Methode zu übergeben? 😕



  • Berzerk schrieb:

    asen schrieb:

    Das Löschen von Methoden passiert zur Kompilierzeit, die Frage macht also keinen Sinn.
    Was willst du denn erreichen?

    Achso oke danke

    Ich wollte meinen Text ausgeben lassen und danach die Funktion löschen 😕

    Jetzt versteh ich aber nicht wozu es diese delete funktion gibt...

    delete ist nur aus einem einfachen Grund da:
    Der Compiler generiert bei Bedarf z.B. automatisch einen copy-Konstruktor, der einfach alle Member kopiert. Es gibt Fälle, da will man das nicht und definiert einen eigenen, z.B. wenn man eine deep copy machen muss. Es gibt allerdings auch Fälle, da will man überhaupt keinen copy-Konstruktor. Dann nutzt man =delete. Das geht aber nur bei Funktionen, die ansonsten vom Compiler automatisch generiert werden.

    Edit: Und um Überladungen zu blocken, siehe nwp3. Hab das total vergessen.



  • Stell dir vor du willst eine Funktion schreiben, die ein long int nimmt, aber kein int oder char.

    void foo(long int){}
    
    int main(){
        foo(42); //42 wird von int in long int konvertiert, doof
        foo('?'); //'?' wird in long int konvertiert, doof
    }
    
    void foo(long int){} //Funktion mit long int gibts
    
    template<class T>
    void foo(T) = delete; //Rest wird gelöscht
    
    int main(){
        foo('?'); //error: versuche eine gelöschte Funktion aufzurufen.
        foo(42); //error: versuche eine gelöschte Funktion aufzurufen.
        foo(42L); //geht
    }
    

    Damit sollte man aber sparsam umgehen. Automatische konvertierungen sind meist schon sinnvoll.


Anmelden zum Antworten