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 bekommt

    func(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 aufgerufen
    

    bis 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?


Anmelden zum Antworten