Geerbte Methode unterdrücken
-
Hi,
gibt es eine Methode, geerbte Methoden zu unterdrücken? Außer natürlich privat zu erben und dann die einzelnen Methoden, die man doch public haben möchte, von der upgecasteten Klasse auszuführen.
-
Nein, gibt es nicht, weil es sinnlos und widersprüchlich ist. Eine Vererbung soll die Klasse erweitern und nicht einschränken. Wenn du das brauchst deutet das auf einen Designfehler hin. Was willst du denn damit bezwecken?
-
In diesem Fall bezieht sich das auf Qt.
Ich erzeuge ein OpenGL Widget, und lasse meine internen Verfahren laufen, auch Threads werden verwendet.
Das Problem ist, dass die public Methoden von dem Widget ausreichen, um mein System total zu zerlegen. Und das nenn dann noch wer Datenkapselung.
-
Du kannst die unerwünschten Methoden in Deiner abgeleiteten Klasse als private deklarieren.
-
Danke, danke :).
-
Genau das ist das Designproblem. Wieso zerlegt eine Standardmethode deinen Code?
-
picaschaf schrieb:
Genau das ist das Designproblem. Wieso zerlegt eine Standardmethode deinen Code?
Wollte ich auch posten, habs dann aber gelassen

-
HighLigerBiMBam schrieb:
picaschaf schrieb:
Genau das ist das Designproblem. Wieso zerlegt eine Standardmethode deinen Code?
Wollte ich auch posten, habs dann aber gelassen

Um keinen Flamewar zu starten hatte ich das auch schon überlegt. Aber es interessiert mich einfach - eventuell finden wir auch eine Lösung die dieses Problem behebt.
-
Razoron schrieb:
Hi,
gibt es eine Methode, geerbte Methoden zu unterdrücken? Außer natürlich privat zu erben und dann die einzelnen Methoden, die man doch public haben möchte, von der upgecasteten Klasse auszuführen.Wenn du public erbst, dann kommt man immer an die Methoden ran.
Man braucht dazu ja bloss den Zeiger bzw. die Referenz casten, und das ist nichtmal "böse" sondern 100% korrektes C++.ps.: wenn die Funktionen virtual sind, bzw. sofort an eine virtual Funktion weiterleiten, kann man natürlich ne Exception werfen, bzw. die virtual Funktion so überschreiben, dass wieder alles so funktioniert wie es funktionieren sollte. Sollte aber klar sein
