Dawidsoni Temat założony przez niniejszego użytkownika |
Wskażniki obiektów dziedziczonych - problem » 2011-08-03 11:31:00 Witam. Mam takie instrukcje: mocny_klocek * wsk_mocny; niezniszczalny_klocek * wsk_niezniszczalny; zwykly_klocek * wsk_zwykly; int zobacz_ile_jest_obiektow_danego_typu( string nazwa ); void wczytaj_dane_do_danego_typu( string nazwa, klocek * wsk_kloc, int ile_klockow ); ....
int ile_zwyklych_klockow = zobacz_ile_jest_obiektow_danego_typu( "zwykly_klocek.png" ) wsk_zwykly = new zwykly_klocek[ ile_zwyklych_klockow ]; wczytaj_dane_do_danego_typu( "zwykly_klocek.png", wsk_zwykly, ile_zwyklych_klockow );
Do funkcji wczytaj_dane_do_danego_typu() będę wysyłał 3 różne typy klocków, które są odziedziczone po klasie klocek. W tej funkcji będę wczytywał wartości do danego typu klocków. Będę się w niej posługiwał zapisem: wsk_kloc++. Jak mi wiadomo wsk_kloc powiększy się wtedy o wielkość obiektu kloc, a nie o wielkość obiektu, który został wysłany do funkcji. Da się jakoś zrobić, żeby program wiedział, o ile ma powiększyć wsk_kloc. Jak nie, to muszę zrobić 3 takie same funkcje dla poliformicznych typów. Słyszałem o szablonach funkcji (czytam Pasję C++, ale jestem na 50 str. i jeszcze nie umiem dobrze się tym posługiwać). Czy gdybym zrobił taki szablon w klasie, to by działało, jak taki szablon globalny? |
|
pekfos |
» 2011-08-03 11:42:25 ale masz nieczytelny kod.. popraw nazwę tematu.
//szablonów nie ma co stosować bo typ użyty do konkretyzacji musi być znany w czasie kompilacji. użyj kontenerów stl zamiast tablic. |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-08-03 11:48:41 Kod nie jest ważny. Chodzi o to, że dziedziczę 3 typy klocków, od typu klocek i chcę wysłać te 3 typy do funkcji, której argumentem jest rodzic tych typów. Potem w tej funkcji jak piszę wsk_kloc++ to adres zmienia się o wielkość obiektu wsk_kloc, a nie o wielkość obiektu wysłanego do funkcji.
Czemu nieczytelny kod? |
|
pekfos |
» 2011-08-03 11:59:24 nie powinno się stosować takich rozwiązań jak tablica z różnymi typami. tablica z definicji jest jednolita. użyj tablicy dwuwymiarowej klocek ** tab w której będą wskaźniki wskazujące na pojedyncze elementy lub kontenera stl ze wskaźnikami. //twój kod jest nieczytelny bo długie nazwy funkcji zmiennych itp. sprawiają że trudno zorientować się w użytych strukturach języka. naprawdę czytelny kod to taki którego nie trzeba czytać by wiedzieć co robi. w twoim kodzie jest zupełnie odwrotnie, wygląda jak jednolity blok znaków. wnioskuję że masz tam pełno funkcji globalnych dla których musisz nadawać unikalne nazwy. to niewątpliwie zły styl programowania. |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-08-03 12:06:53 NIE..
Mam z 7 klas, w których mam po kilka funkcji. Mam zero funkcji globalnych. Mi tam długie nazwy funkcji nie przeszkadzają...
A może nie doszedłem jeszcze do tego etapu, gdzie zaczyna się uważać tak jak ty. |
|
pekfos |
» 2011-08-03 12:09:13 egoista :P pomyśl o innych którzy będą czytać ten kod :P |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-08-03 12:11:07 Ok. Postaram się o krótsze nazwy. Jednak czasami trudno w kilku znakach wyrazić to, co funkcja ma robić. Do tego chciałem wam pomóc i nazwać funkcje tak, żeby było wiadomo co mają robić:D |
|
pekfos |
» 2011-08-03 12:15:02 wróćmy do problemu. podałem 2 rozwiązania: stl i tablice wskaźników. Któreś z nich rozwiązuje problem? |
|
« 1 » 2 |