Mam sytuacje następującą:
class Bazowa
{
int x;
int y;
public:
Bazowa();
virtual ~Bazowa();
int x_f(){return x;}
int y_f(){return y;}
virtual int suma(){return (x+y);}
};
class Pochodna : public Bazowa
{
int p;
int d;
public:
Pochodna();
~Pochodna();
virtual int suma(){return (p+d);}
};
int main()
{
Bazowa *wsk;
wsk=new Pochodna; //I to jest poprawne rzutowanie w gore (upcasting)
Pochodna *ptr;
ptr=new Pochodna; // I to jest moje pytanie, jak interpretować te rzutowanie?
return 0;
}
Problemem jest rzutowanie, sprawia mi to pewien problem nad interpretacja jak kompilator rozumie rzutowanie w tych przypadkach, mam nawet wątpliwość dlaczego rzutowanie [wsk=new Pochodna] jest poprawne a dlaczego np [ptr=new Bazowa] (*ptr-wskaznik typu Pochodna) nie jest dobrym rozwiązaniem, przecież obszar pamieć jaki zajmuje obiekt typu Pochodna jest większa niż obiekt typu Bazowa, wiec dlaczego rzutowanie typu Pochodna *wskaznik=new Bazowa, nie zadziała?
Przeczuwam ze moja interpretacja działania rzutowania jest daleka od poprawnej dlatego prosiłbym bez hejtu :)