Podczas gdy pracowałem w C++ przez jakiś czas, nie musiałem do tej pory korzystać z polimorficznych cech i jestem nimi bardzo zaintrygowany.Podstawowe wskaźniki polimorficzne do klas bazowych
Jeśli mam klasę bazową ClassA
i inny ClassB
wywodzi się z nią, rozumiem, że mogę mieć virtual
funkcję składową w ClassA
, że po wdrożeniu w ClassB
, zostanie wywołana w ClassB
przykład nawet jeśli instancja jest skierowany na za pomocą wskaźnika ClassA
. Bez tego słowa kluczowego virtual
, zakładam, że implementacja klasy bazowej przeważa przy użyciu wskaźnika klasy bazowej, ale działa na obiekcie, który został utworzony z podklasy, co wydaje mi się wątpliwe, jeśli w rzeczywistości ClassB
ma własną implementację tej samej funkcji w takim przypadku jest to faktycznie ignorowane.
Czy to prawidłowe zrozumienie zachowania polimorficznego?
Teraz prawdziwe pytanie brzmi: w jaki sposób odwołujesz się do ClassB
używając wskaźnika do klasy bazowej. Mogę naprawdę tylko pomyśleć dwa sposoby:
- Tworzenie wskaźnik w momencie konkretyzacji, wykorzystując funkcję, która zwraca wskaźnik klasy bazowej, podczas gdy faktycznie przydzielania pamięci dla podklasy zamiast przy użyciu konstruktora podklasy za. (Czy taka funkcja tworzenia ma wspólną nazwę?)
- Przesyłanie obiektu przy użyciu
static_cast
i przypisywanie go do wskaźnika do klasy bazowej.
Czy są to dwie główne techniki generowania wskaźników klasy bazowej dla obiektów podklasy?
powiązanymi: http://stackoverflow.com/q/5854581/46821 –