Cześć, jestem w trakcie nauki C++ z Symfonii i natrafiłem na przykład, w którym nie mogę zrozumieć dlaczego była konieczność zastosowania operatora reinterpret_cast.
Oto przykład:
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////
class wekt
{
double x,y,z;
friend ostream& operator<< (ostream& strumien_wyj, wekt& w)
{
strumien_wyj << w.x << " " << w.y << " " << w.z;
return strumien_wyj;
}
friend istream& operator>> (istream& strumien_wej, wekt& w)
{
strumien_wej >> w.x >> w.y >> w.z;
return strumien_wej;
}
};
//////////////////////////////////////////////////////////////
class wektor_poch: public wekt
{
public:
char opis[30];
friend ostream& operator<< (ostream& strumien_wyj, wektor_poch& w)
{
strumien_wyj << reinterpret_cast<wekt&> (w);
//strumien_wyj << w; DLACZEGO NIE????
strumien_wyj << " " << w.opis;
return strumien_wyj;
}
friend istream& operator>> (istream& strumien_wej, wektor_poch& w)
{
strumien_wej >> reinterpret_cast<wekt&>(w);
//strumien_wej >> w; DLACZEGO NIE????
strumien_wej >> w.opis;
return strumien_wej;
}
};
//////////////////////////////////////////////////////////////
int main()
{
wektor_poch wekt1;
cin >> wekt1;
cout << "\n" << wekt1;
}
Dlaczego referencja do obiektu typu wektor_poch nie może być zamieniona na referencję do typu wekt?
Dlaczego to nie jest przypadek, w którym mogę skorzystać z konwersji standardowej z obiektu klasy pochodnej na obiekt klasy podstawowej?
Program się kompiluje ale nie daje się uruchomić ale to pewnie nie będzie zaskoczeniem dla kogoś kto będzie wiedział o co tu chodzi :)