Vererbung



  • der Header ist doch einfach nur sowas wie ein Interface? enthält die Funktionsnamen, jedoch ohne Funktion.

    Kann ich von einer Klasse an eine andere Klasse vererben, auch ohne

    "class Derived : public Base"

    zu schreiben?
    Wenn ja, was wäre da nötig?



  • sfgheady schrieb:

    der Header ist doch einfach nur sowas wie ein Interface? enthält die Funktionsnamen, jedoch ohne Funktion.

    das reicht ja auch.

    sfgheady schrieb:

    Kann ich von einer Klasse an eine andere Klasse vererben, auch ohne

    "class Derived : public Base"

    zu schreiben?

    nein, weil dies die Notation für Vererbung ist. Warum solltest du sowas wollen?

    Du kannst natürlich eine andere Klasse als Member definieren. Das ist dann aber eine andere Semantik.

    edit: achso, der Vollständigkeit halber: ja, es geht doch. Du kannst auch protected und private vererben:

    class Derived : protected Base
    
    class Derived : private Base
    
    class Derived : Base // entspricht private
    

    Aber ich vermute, das war nicht der Hintergrund deiner Frage.



  • sfgheady schrieb:

    der Header ist doch einfach nur sowas wie ein Interface? enthält die Funktionsnamen, jedoch ohne Funktion.

    Alles was public/protected im Header deklariert wurde, kann auch von einer geerbten Klasse verwendet werden. Dazu muss die geerbte nicht die Implementierung kennen.

    sfgheady schrieb:

    Kann ich von einer Klasse an eine andere Klasse vererben, auch ohne

    "class Derived : public Base"

    zu schreiben?

    Nein.



  • asc schrieb:

    Nein.

    doch, siehe mein edit 😉



  • Doch doch das reicht schon.
    Ich verstehe es so, das ich über die Header an die Funktionen, welche ich in der .cpp definiere, ran kommen kann. Somit brauche ich zum Schluss, wenn ich in einer Header irgendwelche "Prototyp-Funktionen" anlege, diese in der .cpp definiere, nur über die Header zuzugreifen?



  • sfgheady schrieb:

    ...

    Wieso habe ich nur das Gefühl, das du von Java kommst, und deine Denkweise nur schwerlich umstellen kannst.

    sfgheady schrieb:

    Ich verstehe es so, das ich über die Header an die Funktionen, welche ich in der .cpp definiere, ran kommen kann. Somit brauche ich zum Schluss, wenn ich in einer Header irgendwelche "Prototyp-Funktionen" anlege, diese in der .cpp definiere, nur über die Header zuzugreifen?

    Ja, du greifst in der Regel immer nur über die Schnittstelle (ich sage absichtlich nicht Interface, das hat nur bedingt mit einem Java-interface zu tun) zu. In C++ trennt man Deklaration und Definition, was man in vielen anderen Sprachen nicht macht. Und man sollte auch nicht wissen müssen, wie die Implementierung umgesetzt wurde, und immer gegen die Schnittstelle programmieren.

    Wenn du in C++ ein Java-Interface nachbilden willst, so machst du das mittels "pure virtual" Methoden. Aber das ist ein anderes Thema.



  • okay, dein Gefühl enttäuscht dich nicht 😃
    Aber ich arbeite nicht nur mit Java. Sorry das ich erst hier frage und dann google, aber es geht halt schneller und man versteht es besser. 🙂
    Wann sind Membermethoden in einer Klasse sinnvoll bzw. wo ist der unterschied.



  • Du meinst wenn du sie komplett in der Klasse definierst ohne ein *.cpp-Datei zu verwenden?
    Google mal c++ inline funktionen.



  • super, hat sich geklärt. Wenn ich jetzt einer Funktion einen Typ gebe, welcher nicht int, double usw. ist, muss ich ja diesen Typ includen. Habe paar Funktionen, welche String sind, also habe ich #include <string> reingepackt. Jetzt habe ich ein kleines problem, weil ich jetzt eine Funktion brauche, welche ich mit bool definieren will. Er zeigt mir einen Fehler an, jedoch habe ich die stdbool.h schon includiert.



  • bool ist ein Schlüsselwort in C++!
    Du brauchst stdbool.h nicht (zumal es cstdbool heißen sollte).



  • sfgheady schrieb:

    Er zeigt mir einen Fehler an, jedoch

    ...kannst du uns diesen nicht mitteilen.

    Wie wärs mit Minimalcode + Fehlermeldung? Bitte kopieren, nicht abschreiben.


Anmelden zum Antworten