referencja na wskaźnik + dziedziczenie

0

Witam.
Mam następujący problem:

class Bazowa{};
class Pochoda: public Bazowa {};

void funkcja(Bazowa *& v) {}; //przekazuje referencje na wskaźnik

main()
{

Bazowa *b = new Bazowa();
Pochodna *p = new Pochodna();
Bazowa *bp = new Pochodna();

funkcja(b); //jest ok

funkcja(p); // niestety zgłasza błąd - nie można przekonwetrować typu Pochodna * na Bazowa *&

funkcja(pb); //znowu jest ok, ale korzystanie ze wskaźnika pb jest niewygodne, jeśli chce się dostać do pól klasy pochodnej

}

Wie ktoś jak to elegancko obejść? Rzutowanie podczas przekazywania parametru do funkcji niestety nie pomaga.

Edit

O dziwo udał mi się to załatwić rzutując w stylu (Bazowa *&)p zamiast (Bazowa *)p (co, wydawało by się, powinno działać). Jeśli nie wynikną jakieś inne, związane z tym problemy, to możliwe że problem się rozwiązał :)

0

tak nie można bo (przez przykład):

void funkcja(Bazowa *& v) 
{
     v = new Pochodna1; // to jest ok
}

main()
{
      Bazowa *p = NULL;
      Pochodna2 *b = NULL;
      funkcja(p); // to jest ok
      funkcja(b); // a tu widać, że może prowadzić do błędów, więc zakazane
}

Jak już zdecydowałeś się na castowanie to nie w stylu C ale staic_cast.
Żeby było elegancko zrobiłbym tak (to castowanie pod argument wygląda dziwnie i niepokojąco):

main()
{
      Bazowa *p = NULL;
      Pochodna2 *b = NULL;
      funkcja(p); // to jest ok
      b = static_cast<Pochodna2*>(p);
      // albo bezpieczniej
      b = dynamic_cast<Pochodna2*>(p);
}

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