Vererbung



  • Nexus schrieb:

    Ist es wirklich erlaubt, Zugriffsspezifizierer in abgeleiteten Klassen aufzulockern? Ich dachte, einschränken ginge, aber das verwundert mich jetzt ein wenig, da es das Prinzip der Kapselung verletzt...

    man kann es ja mit gewalt verletzen mit

    class trike:  public car 
    { 
    public: 
      string& getMotor()
      {
        return motor;
      }
    };
    

    da ist es nur konsequent, die seltsame using-geschichte nicht einzuschränken.



  • Daran dachte ich auch, als ich meinen Beitrag geschrieben habe. Aber da ist immerhin eine Indirektion vorhanden, während man bei using direkt auf das Objekt zugreift.



  • Nexus schrieb:

    Aber da ist immerhin eine Indirektion vorhanden

    äh. nein.

    faktisch wird ne referenz auf jedem compiler, den ich kenne, als zeiger implementiert. hier mit inline wir die wegoptimiert. faktisch ist da keine indirektion, wenn der compiler nicht ultradumm ist.
    und der standard sagt gar nix, wie das zu geschehen hat, nur daß es sich anfühlen muß, als sei da keine indirektion.



  • Ich meinte das natürlich aus Sicht des Codes und nicht des kompilierten Programmes. Von Klassen kann dann eh keine Rede mehr sein...



  • das feature/bug zu verbieten würde nichts bringen. compiler und mensch können es fein ignorieren. und die praxis zeigt, daß menschen, die müllcode wirklich schreiben wollen, das auch schaffen.
    ich vermute, daß dieses using fast immer müllig ist. naja, nicht immer. private erblichkeit kommt ja auch manchmal sinnvoll vor. sogar goto. das ist so ein feature, das ich einmal in 10 jahren brauche. ich könnte mir vorstellen, daß es deutlichen mehrwert bietet, um in templates geerbte typen wie iteratoren mit einem haufen trivialfunktionen schnell hochzugeben. also nix wichtiges, nur tipparbeit einsparen. das macht mich traurig.



  • aber das Verhalten des Codes ändert sich nicht, wenn ich das "using" weglasse. Dann ist der Zugriff immer noch möglich.



  • Steht denn das car::motor immernoch da? - Nimm es doch einfach weg.. 🙄



  • ja, das steht noch da. Ich versuche mir ja nur den Zusammenhang mit der Vererbung herzustellen.
    Hebel ich denn definitiv die protected-Eigenschaft aus, in dem ich die
    Eigenschaft in der Sub-Class so definiere?
    public: car::motor;



  • JoergL67 schrieb:

    ja, das steht noch da. Ich versuche mir ja nur den Zusammenhang mit der Vererbung herzustellen.
    Hebel ich denn definitiv die protected-Eigenschaft aus, in dem ich die
    Eigenschaft in der Sub-Class so definiere?
    public: car::motor;

    Ja..



  • okay. Groschen ist endlich gefallen.
    Danke


Anmelden zum Antworten