Warum geht virtual const nicht?



  • Hi!

    Ich kann bei MS VS C++.NET im Memberfunktionen Dialog nicht virtual const einstellen.

    Warum geht, dass nicht? - Es müsste doch virtuelle und const Methoden geben, oder?

    MfG,

    EnERgYzEr



  • per Hand machen?



  • meine Frage ist, ob es evtl. theoretisch nicht möglich ist... ich dachte ms hätte sich was gedacht 😉



  • gibt "virtual const" überhaupt sinn ?

    (ich kann mir gerade überhaupt keine anwendung dafür denken ..)



  • virtual const int GetAnzahlDerTiereDieserGattung()
    

    wäre bei jeder abgeleiteten Klasse anders aber auch const...



  • EnERgYzEr schrieb:

    virtual const int GetAnzahlDerTiereDieserGattung()
    

    wäre bei jeder abgeleiteten Klasse anders aber auch const...

    macht keinen Sinn, ich dachte eher du meinst sowas:

    struct A
    {
    	virtual int foo() const = 0;
    };
    


  • au,
    dachte gerade an const variablen ^^ (ganz vergessen das es ja auch const funktionen gibt *kopf gegen wand schlag*)



  • Shlo schrieb:

    macht keinen Sinn

    wieso nicht?

    in der basisklasse wird dann jeweils die zahl aller tiere der untergattungen zurückgegeben und in einer abgeleiteten klasse, die anzahl der tiere dieser gattung...



  • EnERgYzEr schrieb:

    Shlo schrieb:

    macht keinen Sinn

    wieso nicht?

    in der basisklasse wird dann jeweils die zahl aller tiere der untergattungen zurückgegeben und in einer abgeleiteten klasse, die anzahl der tiere dieser gattung...

    mit macht keinen Sinn meinte ich, dass die Rückgabe-Kopie von Built-in Types const zu machen ist sinnlos.



  • war ja auch ein Beispiel...

    wir könnten daraus ja auch das machen:

    virtual const ClassInteger& GetAnzahlDerTiereDieserGattung()
    

    🤡 🤡 👍

    also kann ich zusammenfassend sagen: virtual const ist ok und MS hat nicht nachgedacht, oder? 😃



  • [müll]



  • Hi,

    es macht durchaus Sinn built-in Typen const zu machen, das schlägt Meyers sogar vor.
    Es hat den Sinn, das man von außen das Teil nicht verändern kann.
    Beispielsweise liefert GetA jetzt const int:

    GetA() = 10
    

    Dies klappt nun nicht und es ist gut, dass das nicht klappt, denn es ist nicht sinnvoll so etwas zu machen, aber es kann durchaus passieren, dass man = statt == schreibt. (als Tippfehler natürlich ;))

    MfG Eisflamme



  • das halte ich für übetrieben, wer versucht einem temporären Objekt etwas zuzuweisen, muss nicht ganz dicht sein.



  • Mis2com schrieb:

    es macht durchaus Sinn built-in Typen const zu machen, das schlägt Meyers sogar vor.

    Wage ich zu bezweifeln:

    denn GetInt()=3; funktioniert ja sowieso nicht.



  • EnERgYzEr schrieb:

    virtual const ClassInteger& GetAnzahlDerTiereDieserGattung()
    

    Das gibt eine nicht konstante Referenz auf eine konstante ClassInteger-Instanz zurück. Wenn das & nicht wäre, würde es hinkommen und sogar Meyers' Empfehlungen entsprechen - denn dann könnte man "GetAnzahl...() = 10" nicht schreiben.



  • operator void schrieb:

    Das gibt eine nicht konstante Referenz auf eine konstante ClassInteger-Instanz zurück. Wenn das & nicht wäre, würde es hinkommen und sogar Meyers' Empfehlungen entsprechen - denn dann könnte man "GetAnzahl...() = 10" nicht schreiben.

    seit wann gibt es nicht konstante Referenzen?



  • Shlo schrieb:

    operator void schrieb:

    Das gibt eine nicht konstante Referenz auf eine konstante ClassInteger-Instanz zurück. Wenn das & nicht wäre, würde es hinkommen und sogar Meyers' Empfehlungen entsprechen - denn dann könnte man "GetAnzahl...() = 10" nicht schreiben.

    seit wann gibt es nicht konstante Referenzen?

    Warum soll es Referenzen, welche nicht konstant sind, nicht geben?

    mfg
    v R



  • virtuell Realisticer schrieb:

    Warum soll es Referenzen, welche nicht konstant sind, nicht geben?

    mfg
    v R

    dass man einer Referenz nach Initialisierung ein anderes Objekt zuweisen kann ist mir neu... Oder wovon war nochmal die Rede?



  • Shlo schrieb:

    virtuell Realisticer schrieb:

    Warum soll es Referenzen, welche nicht konstant sind, nicht geben?

    mfg
    v R

    dass man einer Referenz nach Initialisierung ein anderes Objekt zuweisen kann ist mir neu... Oder wovon war nochmal die Rede?

    Nein das geht natuerlich nicht. Aber es gibt konstante Referenzen und nicht
    konstante Referenzen:

    int i = 5;
    const int &const_ref = i;
    int &ref = i;
    
       const_ref = 4; //ups
       ref = 4;
    

    Das meinte ich damit 🙂

    mfg
    v R



  • in dem Fall ist nicht die Referenz konstant sondern das eigentliche Objekt


Anmelden zum Antworten