Jeśli dobrze rozumiem, typeid może określić rzeczywisty typ polimorfizmu, natomiast typeof nie.Uzyskaj typ zmiennej
Czy to prawda, że ich zwroty są wykorzystywane do różnych celów: zwrot typeof jest używany jako słowo kluczowe typu, które może definiować zmienną, ale zwrot typeid nie może?
Czy istnieje sposób na uzyskanie rzeczywistego typu dla polimorfizmu i użycie zwrotu jako słowa kluczowego typu do zdefiniowania innej zmiennej? Mam nadzieję uzyskać typ klasy pochodnej od wskaźnika wskazującego na klasę podstawową i zdefiniować zmienną lub wskaźnik do klasy pochodnej. Coś jak:
baseclass *p = new derivedclass
typexxx(*p) *pp = dynamic_cast<typexxx(*p) *> (p);
// would like to convert the pointer from pointing to a base class
// to its derived class
Dziękuję bardzo!
Czy możesz podać przykład DLACZEGO chcesz to zrobić? Głównym punktem hierarchii dziedziczenia jest to, że zwykle nie musisz znać faktycznego typu. –
Po prostu chcesz odwołać się do niektórych elementów zdefiniowanych w klasie pochodnej, ale nie w klasie bazowej. Nie jestem pewien, czy dobrze jest dodać funkcje członkowskie do klasy bazowej o tej samej nazwie co klasy pochodne i zadeklarować je jako wirtualne, ponieważ te funkcje składowe są zbyt specyficzne dla tej konkretnej klasy pochodnej i nie są wymagane w innych pochodne klasy, a funkcja podstawowa będzie większa, jeśli dodaję do niej. – Tim
OK, możesz robić, co chcesz z dynamic_cast, ale będziesz musiał użyć drabiny if, aby utworzyć wskaźniki pochodne. –