Typ (Subklasse) einer Abgeleiten klasse ermitteln??



  • Konstellation:

    class Root{
    
    };
    
    class A : public Root{
    
    };
    
    class B: public Root{
    
    };
    
    Root **p = new *Root[3];
    
    p[0]= new A();
    p[1]= new B();
    p[2]= new Root();
    

    kann ich nun irgendwie mit dynamic_cast etc. ermitten um welchen Klassen typ es sich bei dem jeweiligen Array Pointer handelt??



  • BorisDieKlinge schrieb:

    kann ich nun irgendwie mit dynamic_cast etc. ermitten um welchen Klassen typ es sich bei dem jeweiligen Array Pointer handelt??

    Ja, kannst du, wie du schon sagtest, mit dynamic_cast.

    Allgemein ist es aber ein Hinweis auf ein mögliches Designproblem, wenn du das in C++ überhaupt herausfinden musst. Wenn du diese Objekte nicht alle wie Root-Objekte behandeln kannst, solltest du sie nicht in ein Root*-Array packen.



  • und wie?

    if(A== dynamic_cast (*p))
    ????

    Das Desigen sieht so aus:

    class Group {
      Group **pArray;
    };
    
    class Node : public Group{
    
    };
    
    class Tree{
      Group *p; //Root
    };
    

    muss zwischen gruppe und End Knoten untscheiden können



  • BorisDieKlinge schrieb:

    muss zwischen gruppe und End Knoten untscheiden können

    Dann regel das über virtuelle Methoden oder wirf die Objekte eben nicht in einen Topf.



  • ok chef;)



  • Wenn du es unbedingt unterscheiden willst (macht imho bestenfalls für Debugging-Zwecke Sinn):

    Root* ptr = ...;
    
    A* typed_ptr = dynamic_cast<A*>(ptr);
    if(A)
      do_something();
    

Log in to reply