Herausfinden welche Klasse übergeben wird : Basis oder abgeleitete ????
-
Hallo zusammen,
ich habe zwei Klassen
class A { } class B : public class A { }noch dazu habe ich eine Methode in einer anderen Klasse die
folgenden Parameter bekommtfunc(const& class A)Wie kann ich denn jetzt am geschicktesten innerhalb dieser Funktion
herausfinden ob ihr ein Objekt von class A oder eins von class B
übergeben wird ?
Je nach Klasse müssen nämliche andere Verarbeitungen aufgerufen werden.Würde mich über eure Hilfe freuen,
DANKE
-
Eine Lösung wäre Überladung - du definierst eine zweite Version "func(const& B)" deiner Funktion, dann wählt der Compiler aus, welche verwendet wird.
Alternativ bietet sich Polymorphie an - du kapselst die notwendigen Verarbeitungen in einer virtuellen Methode der Klasse A und überschreibst die Methode für Klasse B, um etwas anderes machen zu können.
(PS: Wenn du ganz verzweifelt bist, gibt es noch d****)
-
Hallo
Wenn du schon ableitest solltest du auch Polymorphie benutzen, anders ergibt das nämlich keinen Sinn.
class A { ... virtual void func() { // Tue das was A können soll } } class B : public class A { ... virtual void func() { // Tue das was B können soll } } ... A& a = ...; a.func(); // Es wird automatisch die richtige Funktion aufgerufenbis bald
akari
-
Und wenn der Code nicht in den Klassen direkt landen soll kann man es so machen (Visitor Pattern wenn ich mich nicht irre):
class A { public: virtual void doIt(visitor* v) { v->doItForA(this); } }; class B : public A { public: virtual void doIt(visitor* v) { v->doItForB(this); } };
-
Sorry , habe mich vielleicht etwas mißverstädnlich ausgedrückt.
Die Funktion func ist in einer Klasse c
also haben wir folgendes :class A { } class B : public class A { } class C::func ( cons& class A )Und in class A darf/kann ich nichts ändern

Grummel
-
Und was für einen Sinn macht die Vererbung, wenn B etwas völlig anderes ist als A?
-
@Tantor: Nu, deine Frage wurde ja jetzt schon beantwortet, also was gibt's noch für ein Problem?