Alternatywa na przeładowanie funkcji
Ostatnio zmodyfikowano 2012-09-09 14:43
diego997 Temat założony przez niniejszego użytkownika |
Alternatywa na przeładowanie funkcji » 2012-09-09 13:54:44 Cześć mam klasę Ball a w niej metodę move która przymuje dwa parametry: class Player; class Enemy;
class Ball { public: move( Player &, Enemy & ); };
Chciałbym aby ta metoda jako drugi parametr przejmowała albo Enemy albo Player czyli: move( Player &, Enemy & ); move( Player &, Player & );
Nie zawracałbym głowy gdyby ta metoda nie byłaby dość rozbudowana, krótko mówiąc czy da się to rozwiązać w inny sposób niż poprzez przeładowanie funkcji, czyli kopiowanie definicji tej metody ? |
|
pekfos |
» 2012-09-09 13:56:22 Dziedziczenie. |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-09-09 14:29:20 Pekfos dzięki za odpowiedź a co powiesz o szablonach funkcji ? |
|
DejaVu |
» 2012-09-09 14:35:36 Moje doświadczenie mówi, że w większości przypadków pisanie własnych szablonów to strzał w stopę. No ale jeżeli w nich widzisz rozwiązanie to je zastosuj :) Sam swego czasu byłem 'zachwycony' szablonami i je wciskałem wszędzie gdzie można było uznać to za uzasadnione. |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-09-09 14:43:58 Wiesz szablony przyszły mi na myśl pewnie dlatego że gdzieś wyczytałem że z góry nie trzeba podawać typu zmiennej. Natomiast nigdy ich nie używałem dlatego zapytałem czy można by je zastosować. Co do dziedziczenia to kurcze za bardzo nie wiem jakbym mógł wykorzystać, może podałbyś jakiś przykład ? W między czasie poczytam o szablonach, jak faktycznie się w tym pogubię to ewentualnie popróbuję coś z dziedziczeniem ale tak jak mówię póki co nie mam pojęcia jak zastosować. EDIT: Jak co to takie coś udało mi się zrobić puki co spełnia moje oczekiwania :D class A; class B;
class C { public: int liczba; C( int x ); };
class B { public: int liczba; B( int x ); };
class A { public: template < class type > void move( B & B, type & C ); A(); };
int main() { A ObjA; B ObjB( 1 ); C ObjC( 2 ); ObjA.move( ObjB, ObjB ); getch(); }
template < class type > void A::move( B & B, type & C ) { cout << B.liczba + C.liczba; }
A::A() { }
B::B( int x ) { liczba = x; }
C::C( int x ) { liczba = x; }
EDIT:: Kurcze jak chce to zastosować w swoim programie to wyskakuje błąd: unresolved external symbol "public: void __thiscall _Ball::move<class _Enemy>(class _Player &,class _Enemy &)" (??$move@V_Enemy@@@_Ball@@QAEXAAV_Player@@AAV_Enemy@@@Z) referenced in function _main
a kod wygląda tak: template < class Type > void move( _Player &, Type & Enemy );
W definicji move korzystam tylko z publicznych metod, nazwy są takie same. EDIT:: Okazało się iż problem tkwi w tym że klasy są w osobnych plikach, puki co jeszcze nie rozwiązałem problemu ;p |
|
« 1 » |