Rzutowanie w dół

0

Cześć. Mam zrobić program z polimorfizmu, została ostatnia funkcja i wywala mi błędy przy rzutowaniu. Zerknie ktoś okiem co jest nie tak? Visual Studio 2015 podkreśla mi dynamic_cast.

 void testuj()
{
	TStudent st("aaa", "bbb", 21, "ccc", "ddd", 2, "eee", 2);
	st.wyswietl();
	TStudent *s = dynamic_cast <TOsoba*>(&st);
	s->wyswietl();
	TOsoba &s1 = st;
	s1.wyswietl();
	cout << st.PodajNazwisko() << " " << st.PodajKierunek() << endl;
	cout << s->PodajNazwisko() << " " << s->PodajKierunek() << endl;
	delete s;
}
0

To nie ma sensu.

  1. Skoro Student dziedziczy po Osoba to nie ma potrzeby jawnego rzutowania Student->Osoba.
  2. Rzutowanie w dół byłoby wtedy jeśli chciałbyś rzutować wskaźnik Osoba na Student.
Osoba* osoba = new Student( /*...*/ );
osoba->wyswietl();

Student* student = static_cast< Student* >( osoba );  // 1
student->wyswietl();

ad.1) Wiesz, że pod wskaźnikiem kryje się instancja klasy Student więc możesz zastosować static_cast. dynamic_cast stosuj tylko wtedy, jeśli przypuszczasz, że jest tam instancja danej klasy, ale ręki sobie za to nie dasz uciąć ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1