partielle einschränkung beim vererben



  • hallo,
    also ich hab ungefähr folgende sache

    class A
    {...};
    class B
    {...};
    class C : public A, public B
    {...};
    class D : private C
    {...};
    

    und zwar möchte ich gern in der Klasse D alle geerbten methoden von A als public haben und das von B und was in C neu dazugekommen ist soll private sein. allerdings ohne dass ich die ganzen methoden mit using in der public bereich ziehe, das wäre nämlich bissl viel.
    frage ist jetzt also ob das irgendwie geht.
    danke schonmal im voraus.



  • Das macht keinen Sinn.

    Mit Vererbung sagst du ja:

    D ist ein C

    Nun willst du aber sagen
    D ist ein bisschen wie C.

    Und da ist public Vererbung einfach nicht das richtige.

    Was willst du denn genau machen?



  • bei C ist ja prinzipiell alles public was public sein soll, also A und B sind public geerbt.
    und in D möchte ich quasi einige sachen von C vor dem user verbergen und einiges halt nicht.
    wenn ich also private C vererbe, sieht der user in D nichts von C und ich muss alles was er sehen soll mit using in den public bereich ziehen.
    wenn ich aber public C vererbe, kann er in D alles von C benutzen, was ich aber halt nicht möchte.



  • mir ist schon klar dass du das so machen willst, nur das ist der falsche ansatz.

    Erklaer mal warum du das so machen willst.

    Denn Vererbung sagt nunmal ein D ist ein C. dh, ich kann ein D ueberall dort verwenden wo ein C erwartet wird. Wenn du nun aber gewisse Funktionen private machst, ist das ja nicht mehr moeglich. Deshalb geht das so nicht.

    Eine Moeglichkeit waere D nicht von C public erben zu lassen und dann eben die notwendigen Funktionen wieder oeffentlich zu machen.

    Das ganze riecht aber eher nach Code-Reuse, also ersparnis von Schreibarbeit. Und das ist meistens der falsche Ansatz. Vererbung ist eine sehr sehr ernste Sache. Man erbt nicht einfach so.



  • na wenn ich private C erbe, dann schraube ich ja alle zugriffsrechte von C in D auf private runter, das geht ja ganz regulär. sehe ich also nicht so ganz das problem was du hast. und ich will halt nicht alles pauschal auf private runterschrauben, weil ein paar sachen sollen ja noch zugänglich bleiben.
    da gäbe es halt die möglichkeit das im public-bereich von D mit using wieder sichtbar zu machen, das wären aber ne menge methoden, nämlich alle public methoden aus der klasse A, die wohlbemerkt in C auch schon public waren. in D sollen dann quasi nur die rechte der klasse B auf private runtergeschraubt werden aber A soll public bleiben.
    und ja es soll mir schreibarbeit ersparen.



  • Ich sehe momentan zwei Probleme. Das erste hat Shade schon angesprochen. Vererbung ist eine designtechnische Entscheidung und kann deshalb nie mit dem Sparen von Schreibarbeit gerechtfertigt werden. Zweitens sagst du, A habe so viele Methoden, dass es zu aufwändig wäre, sie alle per using zu veröffentlichen. Daraus folgt, dass A schon zu monolitisch aufgebaut ist. Eine Klasse sollte nicht dutzende Methoden haben. Es gilt der Grundsatz: Eine Klasse, eine Aufgabe.

    Ach so, um dann auf deine Frage zu antworten: Nein, so etwas ist nicht ohne den Schreibaufwand (entweder für die using-Deklarationen oder Wrapper-Funktionen) möglich. Eben weil es designtechnisch so keinen Sinn macht und deshalb nie benötigt wird.

    Gruß
    Don06



  • nagut, dann werde ich mir was anderes einfallen lassen müssen.
    danke trotzdem.



  • FreakyBKA schrieb:

    das wäre nämlich bissl viel.

    Was heißt "bisschen viel"? das legt den Verdacht nahe dass deine Klasse eventuell das SRP verletzt.


Anmelden zum Antworten