Wpis z mikrobloga

Hej Mirki-programiści c++
Mam zagwozdkę, może ktoś mi tutaj pomoże rozwiać wątpliwości.
Załóżmy, że mam klasę bazową i klasę pochodną, która dziedziczy :public z klasy bazowej. Oprócz tego klasa pochodna ma jakieś pola/metody zdefiniowane w niej samej po raz pierwszy (klasa bazowa w ogóle ich nie ma) jako public. Tworzę sobie wskaźnik typu klasy bazowej. Na tym wskaźniku tworzę obiekt klasy pochodnej operatorem new. Czy w tej sytuacji mam w jakiś prosty sposób dostęp do tych pól/zmiennych które istnieją dla klasy pochodnej? Przy zapisie wskaznik->metoda(); kompilator krzyczy że klasa bazowa nie ma czegoś takiego jak metoda (co jest prawdą w sumie).
#programowanie #kiciochpyta
  • 3
Musisz sobie zrobić castowanie na klasę pochodną. Żeby mieć pewność, że napewno odnosisz się do obiektu, który jest rzeczywiście obiektem klasy pochodnej, którą jesteś zainteresowany możesz to zrobić za pomocą std::dynamic_cast Dokumentacja.

Pozwoli Ci to na sprawdzenie, czy rzutowanie sie udało:

Base* b1 = new Derived;
if(Derived* d = dynamic_cast(b1))
{
std::cout << "b1 jest obiektem klasy Derived";
d->metodaKlasyPochodnej();
}

Oczywiście jeżeli w konkretnym kontekście masz pewność, że obiekt pod wskaźnikiem