Wywoływanie metody na rzecz obiektow roznego typu - C++


(Trance) #1

Mam pytanie: Czy istnieje jakiś sposób aby móc wywołać metodę z danej klasy, tak aby mogła przyjmować w argumencie obiekty różnych typów.

Dla wyjaśnienia:

Class Klasa 1{

// jakies zmienne public

};

Class Klasa2: public Klasa1{

// jakies zmienne public

};

Class Klasa3: public Klasa1{

// jakies zmienne public

};

Class Klasa4{

void jakas_metoda(Klasa1 a);

};

Chodzi mi o to czy istnieje jakis sposob by void jakas_metoda(Klasa1 a) można bylo wywoływac z obiektem klas Klasa2 lub Klasa3.

Pytam ze wzgledu na to że w moim przypadku void jakas_metoda(Klasa1 a) jest dość obszerna i chciałbym wiedzieć czy istnieje jakiś wydajniejszy sposób niz tworzenie: void jakas_metoda(Klasa1 a), void jakas_metoda(Klasa2 b) void jakas_metoda(Klasa3 c) w Klasa4


(somekind) #2

Dziedziczenie po wspólnej klasie abstrakcyjnej?

Szablony funkcji?


(Fiołek) #3

@ somekind: :To wcale nie musi być klasa abstrakcyjna, wystarczy zwykła wirtualna.

@ Trance: Użyj wskaźnika na klasę "Klasa1". Kompilator sam się zatroszczy o to by wywołać metodę przeciążoną. Ew. możesz skorzystać ze zwyczajnego rzutowania, ale wtedy będą wywoływać się funkcję z Klasa1. I poczytaj o polimorfizmie.