Abgeleitete Klasse in Basisklasse nutzen. Schlechter Stil?
-
Hallo C++ Freunde
Kann man eine Abgeleitete Klasse in einer Basisklasse nutzen? So in etwa:
class A { ... B *func() { ... ] } class B : public A { ... }Funktioniert so etwas? Ich versuche gerade ein Objektmodell zu bauen und es bietet sich gerade zu an. Wäre das als schlechter Stil zu werten?
-
Hmm, ist aus meiner Sicht nicht sinnvoll. Kann aber sein, dass ich etwas übersehe.
Was hat du denn genau vor?
-
Sinnvoll ist es mit einer Wahrscheinlichkeit von:
Circa 1:250, aber je nach Umfeld. Bei betrieblichen Anwendungen auch 1:100000, bei technischer Forschung auch runter bis 1:80.Genauere Angaben kann man kaum machen, solange die Frage so vage bleibt.
(Ich kann mir Bereiche vorstellen, die im Jahresschnitt bis 1:65 runtergehen. Aber ich bin auch extrem verspielt, was sowas angeht.)
-
icarus2 schrieb:
Hmm, ist aus meiner Sicht nicht sinnvoll. Kann aber sein, dass ich etwas übersehe.
Was hat du denn genau vor?
A ist der "Gesamt-Datenbestand".
B ist ein "Teil-Datenbestand".B hat viele Funktionen von A womit sich A wunderbar als Basisklasse einsetzen lässt.
A hat eine Funktion zur Ausgabe des "Teil-Datenbestandes" wofür sich B wunderbar eignet.
volkard schrieb:
Sinnvoll ist es mit einer Wahrscheinlichkeit von:
Circa 1:250, aber je nach Umfeld. Bei betrieblichen Anwendungen auch 1:100000, bei technischer Forschung auch runter bis 1:80.Genauere Angaben kann man kaum machen, solange die Frage so vage bleibt.
(Ich kann mir Bereiche vorstellen, die im Jahresschnitt bis 1:65 runtergehen. Aber ich bin auch extrem verspielt, was sowas angeht.)
Ich bin nicht so fit in C++. Es hätte ja sein können dass es verpönt wird. Außerdem wollte ich das Problem auf wenig und übersichtlichen Text kürzen.
-
Ich erinnere mich noch daran, daß ich das damals auch wollte. Leider fällt mir der konkrete Fall nicht mehr ein. Mist!
Aber ist sehr lange her, daß ich das wollte. Ich vermute mal, daß Du es nur willst, weil Dir eine viel großartigere und tatal passende Lösung noch nicht gezeigt wurde. Auf die Supi Tricks kann man gar nicht selber kommen, nebenbei, die muß man lesen. Buch macht kluch.
-
polymorphie schrieb:
A ist der "Gesamt-Datenbestand".
B ist ein "Teil-Datenbestand".B hat viele Funktionen von A womit sich A wunderbar als Basisklasse einsetzen lässt.
A hat eine Funktion zur Ausgabe des "Teil-Datenbestandes" wofür sich B wunderbar eignet.
Was genau ist der Unterschied zwischen einem "Gesamt-Datenbestand" einem "Teil-Datenbestand"? Warum können beides nicht einfach nur Datenbestände sein!?
-
volkard schrieb:
Ich erinnere mich noch daran, daß ich das damals auch wollte. Leider fällt mir der konkrete Fall nicht mehr ein. Mist!
Aber ist sehr lange her, daß ich das wollte. Ich vermute mal, daß Du es nur willst, weil Dir eine viel großartigere und tatal passende Lösung noch nicht gezeigt wurde. Auf die Supi Tricks kann man gar nicht selber kommen, nebenbei, die muß man lesen. Buch macht kluch.
Ich habs ja verstanden.
Im Übrigen ist der Buchhinweis nicht immer sinnvoll. C++ für Anfänger ist mir zu primtiv weil Nutzen/Zeit -> 0. Ich habe mir das hier viel zitierte Primer gekauft und mal in die ersten 200 Seiten hinein geschaut. Ich mag keine Beispiele die sich durch Kapitel ziehen. Seitdem sammelt es im Regal Staub.
Die Informatiker Beispiele aus manchen STL-(u.ä.) Büchern sind weltfremd und zu 90% nur für Informatiker zu gebrauchen. So wie manche Mathematikbücher. Über Referenzen (z.B.) Boost sind für den schnellen Einstieg genau so sinnlos.
Mir hat das "C von A bis Z" gefallen weil es (soweit ich mich erinnern kann) kurz prägnante aber dennoch verständliche Bespiele und Textblöcke hatte. Ideal wenn man schon eine andere Sprache gelernt hat. Schnell mal Dos und NoDos aufzählen.
Also bräuchte ich etwas wie "C++ von A bis Z". Aber nicht das aktuelle weil da die Hälfte aus "C von A bis Z" hinein kopiert wurde.
dot schrieb:
Was genau ist der Unterschied zwischen einem "Gesamt-Datenbestand" einem "Teil-Datenbestand"? Warum können beides nicht einfach nur Datenbestände sein!?
Ich fürchte das Hilft hier ohne Quellcode nicht weiter weil es ein technisches Problem darstellt. Da sich Herr Moderator schon das zweite mal geräuspert hat ist es sicher besser direkt die Finger davon zu lassen. Dankeschön von meiner Seite.
-
volkard schrieb:
Sinnvoll ist es mit einer Wahrscheinlichkeit von:

volkard schrieb:
Auf die Supi Tricks kann man gar nicht selber kommen, nebenbei, die muß man lesen. Buch macht kluch.
Doch, geht schon. Dauert aber lange. Viel zu lange.
-
Naja, "C von A bis Z" und "C++ von A bis Z" sind nun nicht gerade Beispiele für Bücher, die von Autoren geschrieben wurden, die ihre Sprache verstehen.
Was das Benutzen von abgeleiteten Klassen in Basisklassen angeht, so ist es nicht von sich aus problematisch. Problematisch ist es da, wo das Objekt der Basisklasse in die abgeleitete Klasse gecastet werden soll - der benutzende Code sollte sich nicht darum scheren müssen, welcher konkreten Klasse das Objekt, mit dem er hantiert, eigentlich ist (eine Ausnahme zu dieser Feststellung ist CRTP).
Wenn es um die Modellierung von Zusammenhängen geht, spricht aber direkt nichts dagegen. Mir fällt als Beispiel eine Menüstruktur ein - etwa so:
class menu; class menuitem { public: menu *parent_menu(); ... }; class menu: public menuitem { ... };...worin ein Menü eine Liste von menuitems hält, hinter denen sich auch Untermenüs verbergen können.
Vielleicht kannst du etwas genauer beschreiben, was du eigentlich vorhast. Ganz ohne Informationen ist es schwer zu beurteilen, ob es in deinem Fall Sinn ergibt.