Vererbung


  • Mod

    Tobias Gerg schrieb:

    Private member sind für abgeleitete Klassen nicht sichtbar. Mach spass anstatt private protected



  • SeppJ schrieb:

    Tobias Gerg schrieb:

    Private member sind für abgeleitete Klassen nicht sichtbar. Mach spass anstatt private protected

    Danke aber das habe ich schon gelesen was Tobias Gerg geschrieben hat, verstanden habe ich es nicht ganz. Also bei mir in der Aufgabe steht, dass Spass Private deklariert werden muss



  • pava schrieb:

    Tobias Gerg schrieb:

    Private member sind für abgeleitete Klassen nicht sichtbar. Mach spass anstatt private protected

    danke für die schnelle Antwort. Also wenn ich das jetzt rchtig verstanden habe, du meinst wenn ich private lösche klappt das? und dann sieht es so aus:

    class freizeitrad : public fahrrad
    {
    	[u]protected:[/u]
    		double spass;
    	public:
    		void abschliessen(bool disziplin);
    		double geniessen (double genuss)
    		{
    			return (genuss+spass);
    		};
    		freizeitrad (double spass_in, int rad_in) : fahrrad (rad_in)
    		{
    			spass = spass_in;
    		}
    };
    

    oder?



  • pava schrieb:

    Also wenn ich das jetzt rchtig verstanden habe, du meinst wenn ich private lösche klappt das?

    Dann wäre es weiterhin privat, da die Standardsichtbarkeit in Klassen nun mal privat ist. Unter C++ gibt es: public, protected, private.

    pava schrieb:

    ...Danke aber das habe ich schon gelesen was Tobias Gerg geschrieben hat, verstanden habe ich es nicht ganz...

    Eben statt "private" ein "protected" schreiben, wie hätte man den Satz bitte anders interpretieren können. Da steht nichts davon das du private entfernen und durch nichts ersetzen sollst.

    pava schrieb:

    Also bei mir in der Aufgabe steht, dass Spass Private deklariert werden muss

    Dann ist der Zugriff in einer abgeleiteten Klassen unmöglich. Im Gegensatz zu "private" erlaubt "protected" gerade dieses, das man aus einer abgeleiteten Klasse darauf zugreifen darf.

    Eine Alternative wäre nur die Variable privat zu lassen, und ihren Zugriff über Methoden zu gewährleisten, die entweder protected oder public sind.



  • wow das klappt, danke schön Tobias Gerg, ich bin noch anfänger deswegen habe ich es nicht sofort verstanden was du meintest. eine frage hätte ich noch warum klappt es mit

    protected
    

    und nicht mit

    private
    

    , also was ist der unterschied?

    danke nochmal.

    Pava



  • pava schrieb:

    ...eine frage hätte ich noch warum klappt es mit

    protected
    

    und nicht mit

    private
    

    , also was ist der unterschied?

    Zugriff möglich?
               In Klasse   In abgeleiteter Klasse   Von außen
    public        ja                 ja                ja
    protected     ja                 ja               nein
    privat        ja                nein              nein
    


  • pava schrieb:

    warum klappt es mit

    protected
    

    und nicht mit

    private
    

    , also was ist der unterschied?

    Das sollte im C++-Buch deiner Wahl nachzulesen sein. Dies ist also der ideale Zeitpunkt das zu tun 🙂
    Allgemein ist es bei solchen Fragen bzw. wenn du Tips kriegst wo du einzelne Schlagworte noch nicht ganz verstehst ratsam, dich erstmal im Buch oder auch im Netz umzusehn ob du näheres rausfinden kannst.



  • hallo,
    so ich habe jetzt schon das nächste Problem, soweit ich weiss haben void fonktionen keinen Rückgabewet, aber bei der aufgabe wird das irgenwie verlangt, ich weiss nicht ob ich das richtig verstanden habe :

    public Methoden:
    double bereitstellen (double treibstoff); // Zählt zum Parameter treibstoff
    // das Ergebnis von tanken() dazu, nimmt das
    // Ergebnis als Treibstoffmenge und ruft
    // bereitstellen()der Basisklasse auf
     private Methoden:
    void tanken(); // Gibt die Tankmenge 2000.0 zurueck
    

    Muss man dan eine neue Variable zb: Tankmenge in der funktion tanken deklarieren damit es geht? man kann leider nicht einfach schreiben :

    return (2000.0);
    


  • pava schrieb:

    public Methoden:
    

    Das heißt wenn schon:

    public:
    

    Es gibt kein "public Methoden:"

    pava schrieb:

    hallo,
    so ich habe jetzt schon das nächste Problem, soweit ich weiss haben void fonktionen keinen Rückgabewet, aber bei der aufgabe wird das irgenwie verlangt, ich weiss nicht ob ich das richtig verstanden habe :

    Eine void-Funktion KANN keine Werte zurückgeben. Daher nützt dir auch kein "return 2000.0;" etwas. Was ich mir vorstellen könnte ist, das hier die Membervariablen geändert werden.



  • "public methoden" so hat der Professor die Aufgabe gestellt, damit mein er :

    public :
    double bereitstellen (double treibstoff);
    private :
    void tanken();
    

    so jetzt versteht es auch jeder hoffentlich.



  • Nur so als Einwurf: Es ist nicht immer ratsam, private durch protected zu ersetzen. Oft ist Kapselung wichtiger.


Anmelden zum Antworten