Was bringt Vererbung?



  • Ich frage mich schon die ganze Zeit, was Vererbung bringt. Wenn ich jetzt sowas habe:

    class A {
    private:
        int i;
    public:
        void foo() {
            i = 10;
        };
    };
    
    class B : public A {
    private:
        int i;
    public:
        void foo() {
            i = 12;
        };
    };
    

    Dann wird die Funktion foo von A ja vererbt und in foo überladen. Doch was bringt das, wieso brauch ich dann Vererbung, wenn ich in jeder Subklasse die Funktion eh nochmal überladen muss. Und im Internet habe ich bisher noch keine ausführlicheren Beispiele gesehen, weshalb mit der Sinn von Vererbung noch verborgen bleibt.



  • Dein Beispiel hat überhaupt nichts mit Polymorhpie zu tun.
    Schnapp dir am besten ein anständiges C++ Buch und lies dir das mal in Ruhe durch.



  • das ganze hat mit polymorphie nix zu tun... du überschreibst einfach die alte (class A) funktion.



  • Ok, wenn das ganze nichts mit Polymorphie zu tun hat, ahbe ich bisher also ziemlichen Mist gelesen. Aber was bringt Vererbung dann im Allgemeinen?

    EDIT: Ich hab den Titel mal geändert.



  • wenn du es brauchst wirst es schon merken 😃



  • Kaufe dir ein gutes Buch. Vererbung kann man wohl kaum in 1-2 Sätzen richtig erklären.

    Ganz kurz Vorteile der Vererbung:
    - Codewiederverwendbarkeit
    - Gute Wartbarkeit
    - Gut gegen code duplication

    Wie gesagt... gutes Buch kaufen und mal gemütlich durchlesen 😉



  • Ich hatte schonmal ein Projekt mit mehreren tausend Zeilen und (für mich) Objektorientierung und ich habe mich schon da immer gefragt, was Verebung bringen soll. Um die vererbten Funktionen sinnvoll zu nutzen, muss ich die doch eh überschreiben, oder können vererbte Funktionen der Klasse A die privaten Member von Klasse B ändern?



  • stand da nicht eben polymorphie statt vererbung?



  • Ja und wenn du lesen könntest, würdest du sehen das ich den Titel geändert habe :p



  • also spätestens nach 5000+ sloc ist mir definitiv klar geworden wofür überladung/polymorphie/verebung nützlich ist(nützlich != notwendig). kpl. was du da entwickelt hast, aber scheinbar wars nix gescheites...



  • __-- schrieb:

    also spätestens nach 5000+ sloc

    Scheiß lines of code?



  • Pikkolini schrieb:

    Ich hatte schonmal ein Projekt mit mehreren tausend Zeilen und (für mich) Objektorientierung und ich habe mich schon da immer gefragt, was Verebung bringen soll. Um die vererbten Funktionen sinnvoll zu nutzen, muss ich die doch eh überschreiben, oder können vererbte Funktionen der Klasse A die privaten Member von Klasse B ändern?

    Wenn du Vererbung, protected und all das Zeug, wo man braucht um vernünftig Programmieren zu können kennen würdest, wären das nur noch ca. 100 LLOC gewesen.



  • ???leider schrieb:

    __-- schrieb:

    also spätestens nach 5000+ sloc

    Scheiß lines of code?

    nö ich fand die toll 😋



  • "Früher" war das Hauptargument für Vererbung eigentlich Codewiederverwendung. Heute verwendet man die Techniken der Vererbung für sehr flexible, erweiterbare und gut wartbare Entwürfe. Für einfache Codewiederverwendung ist man mit den Mitteln der Komposition besser bedient. Das Thema ist aber so allgemein und grundlegend dass so eine Frage besser an ein gutes Buch adressiert ist als an ein Forum.



  • Pikkolini schrieb:

    Ich hatte schonmal ein Projekt mit mehreren tausend Zeilen und (für mich) Objektorientierung und ich habe mich schon da immer gefragt, was Verebung bringen soll. Um die vererbten Funktionen sinnvoll zu nutzen, muss ich die doch eh überschreiben, oder können vererbte Funktionen der Klasse A die privaten Member von Klasse B ändern?

    1. Du musst eine Funktion, die das gleiche machen soll, nicht überschreiben.
    2. Wenn du deine Member nicht private, sondern protected machst, dann kannst du von ableitenden Klassen darauf zugreifen.
    3. Google
    4. Polymorphie bringt auch noch was, schau dir einfach mal ein gutes GUI-Framework an, dann weißt du, was Vererbung bringt.


Log in to reply