virtual und const?



  • Ich bin auf folgende abstrakte Klasse gestoßen - nun würde mich interesieren was das Schlüsselwort const für einen Unterschied macht - das Programm verhält sich nicht anders wenn ich const weglasse...

    class Interface
    {
    public:	
    	virtual bool IsInitialized() const = 0;
    	virtual bool StopAll() = 0;
    };
    


  • Vertexwahn schrieb:

    Ich bin auf folgende abstrakte Klasse gestoßen - nun würde mich interesieren was das Schlüsselwort const für einen Unterschied macht - das Programm verhält sich nicht anders wenn ich const weglasse...

    Das "const" an dieser Stelle gibt an, dass durch den Aufruf der Methode IsInitialized() der Wert der Instanz von Interface nicht geändert wird.

    Dies ist dann wichtig, wenn du in einer (anderen) Methode einen Wert vom Typ "const Interface" übergeben bekommst. Du darfst einen solchen Wert nicht ändern, darum erlaubt dir der Compiler auf dem übergebenen Wert dann nur const-Methoden aufzurufen.



  • mawis schrieb:

    Vertexwahn schrieb:

    Ich bin auf folgende abstrakte Klasse gestoßen - nun würde mich interesieren was das Schlüsselwort const für einen Unterschied macht - das Programm verhält sich nicht anders wenn ich const weglasse...

    Das "const" an dieser Stelle gibt an, dass durch den Aufruf der Methode IsInitialized() der Wert der Instanz von Interface nicht geändert wird.

    Dies ist dann wichtig, wenn du in einer (anderen) Methode einen Wert vom Typ "const Interface" übergeben bekommst. Du darfst einen solchen Wert nicht ändern, darum erlaubt dir der Compiler auf dem übergebenen Wert dann nur const-Methoden aufzurufen.

    ne so würd ich das nich sagen

    -konstante memberfunktionen dürfen keine membervariablen verändern
    -konstante klasseninstanzen dürfen nur konstante memberfunktionen aufrufen

    -> konstante klasseninstanzen verändern ihren inhalt nicht... bleiben also konstant 😉



  • Sovok schrieb:

    ne so würd ich das nich sagen

    -konstante memberfunktionen dürfen keine membervariablen verändern
    -konstante klasseninstanzen dürfen nur konstante memberfunktionen aufrufen

    -> konstante klasseninstanzen verändern ihren inhalt nicht... bleiben also konstant 😉

    Okay ... hatte im Hinterkopf hat noch mutable-Elemente und wollte darauf nicht eingehen, darum war's mir wichtiger zu sagen, dass du const-Funktionen halt auf einer const-Instanz aufrufen kannst.


Anmelden zum Antworten