gleiche Methode in verschiedenen Klassen
-
Hallo,
ich habe zwei Klassen A und B, die nichts miteinander zu tun haben, allerdings einmal eine gleiche Methode verwenden:
class A { public: A(); methode(); }; class B { public: B(); methode(); };Gibt es einen Weg das so zu umschreiben, dass die Funktion nur einmal definiert werden muss? Ich könnte ja aus methode() eine Klasse mit überladenem ()-Operator machen, aber gibts da noch einen eleganteren Weg?
-
Wie können die Klassen nichts miteinander zu tun haben, aber trotzdem eine Methode gemeinsam haben? Entweder ist diese Methode eine Gemeinsamkeit oder es sollte gar keine Klassenmethode sein. Kannst du konkreter werden, was du hier modellieren möchtest?
-
Bei den Klassen handelt es sich jeweils um einen "Encoder" und einen "Decoder" (Komprimieren von Textdateien). Beide erzeugen aus den Elementen eines priority_queue einen binären Baum, was besage Methode darstellt.
Wäre es hier dann angebracht einfach eine abstrake Superklasse zu erstellen?
-
Hat dieses Erstellen des Baums überhaupt irgendetwas mit der Funktion der Klassen zu tun? Das klingt so, als wäre das eine freie Funktion (oder unabhängige Klasse) die aus einem gegebenen Input einen bestimmten Output erzeugt, unabhängig davon wer oder was diese Aktion in Auftrag gibt.
Wäre es hier dann angebracht einfach eine abstrake Superklasse zu erstellen?
Falls beide Klassen eine Spezialisierung einer allgemeinen Baumerstellerklasse sein sollten, dann wäre dies der Weg. Klingt von der Beschreibung her jedoch eher nicht so.
-
Du hast Recht, im Prinzip ist es wirklich eine freie Funktion, die für sich alleine stehen kann. Also aus beiden Klassen auslagern?
So oder so spiele ich mit dem Gedanken, die Klassen einfach wegzulassen; ich erzeuge in meinem Programm eh nur jeweils eine Instanz.
-
mortified_penguin schrieb:
So oder so spiele ich mit dem Gedanken, die Klassen einfach wegzulassen; ich erzeuge in meinem Programm eh nur jeweils eine Instanz.
Das ist kein Grund.
-
Das ist mir durchaus bewusst.
-
Du kannst auch einfach eine einzige Klasse schreiben, welche eine Methode Encode bzw. Decode enthält.
Die Klasse kümmert sich dann um das öffnen der Datei.
-
Haben die Klassen denn überhaupt Membervariablen?
-
Ja, die Wurzel des Baums und der ifstream bzw. ofstream.
-
Ist denn der Baum keine Klasse für sich?
(Unterscheidet sich der Baum überhaupt von einem (multi-)set oder -map aus der Standardbibliothek?)
-
Der Baum besteht aus struct-"Knoten" die auf ihren linken und rechten Sohn zeigen.