Znikające wartości zmiennych w klasach
Ostatnio zmodyfikowano 2013-02-24 09:37
Alan468 Temat założony przez niniejszego użytkownika |
Znikające wartości zmiennych w klasach » 2013-02-24 00:54:16 Witam, zgodnie z Waszą wcześniejszą radą zacząłem czytać o klasach ,.... wynikiem stał się pewien początek jakiejś tam gierki w konsoli ,oczywiście (prawie)wszystkie zmienne są w klasach, a kod jest podzielony na mniejsze funkcje ... tyle co sądziłem ,że zmienne z klas są widoczne w całym programie przy odpowiednim wywołaniu to okazało się ,że w każdej funkcji i main() dostaje całkiem inne wyniki... #include <iostream> #include <cstdlib> #include <ctime> using namespace std; class WyboryKlasy { public: int NrPostaciWroga; string PostacWroga; int NrPostaciGracza; string PostacGracza; WyboryKlasy(); }; WyboryKlasy::WyboryKlasy() { NrPostaciWroga; PostacWroga; NrPostaciGracza; PostacGracza; } class Wojownik { public: int AtackSpeed; int DemageMin; int DemageMax; int Health; int Sila; int Level; Wojownik(); }; Wojownik::Wojownik() { AtackSpeed = 10; DemageMin = 25; DemageMax = 34; Health = 150; Sila = 100; Level = 1; }
class Magik { public: int AtackSpeed; int DemageMin; int DemageMax; int Health; int Mana; int Level; Magik(); }; Magik::Magik() { AtackSpeed = 15; DemageMin = 14; DemageMax = 25; Health = 100; Mana = 150; Level = 1; } class Paladin { public: int AtackSpeed; int DemageMin; int DemageMax; int Health; int Mana; int Level; Paladin(); }; Paladin::Paladin() { AtackSpeed = 13; DemageMin = 30; DemageMax = 35; Health = 150; Mana = 135; Level = 1; }
int Informacje_o_postaciach() { Wojownik Woj; Magik Mag; Paladin Pal; }
int Gracz_Wybiera() { WyboryKlasy WK; bool Wybor_Zatwierdzony = false; do { cout << "\t1-Wojownik\n\t2-Magik\n\t3-Paldin\nWybierz swoja postac: "; cin >> WK.NrPostaciGracza; if( WK.NrPostaciGracza == 1 ) { WK.NrPostaciGracza = 1; WK.PostacGracza = "Wojownika"; Wybor_Zatwierdzony = true; } if( WK.NrPostaciGracza == 2 ) { WK.NrPostaciGracza = 2; WK.PostacGracza = "Magika"; Wybor_Zatwierdzony = true; } if( WK.NrPostaciGracza == 3 ) { WK.NrPostaciGracza = 3; WK.PostacGracza = "Paladina"; Wybor_Zatwierdzony = true; } if( WK.NrPostaciGracza >= 4 ) { cout << "Zle ... musisz powturzyc wybor ... ." << endl << endl; } } while( Wybor_Zatwierdzony == false ); cout << endl << "Wybrano: " << WK.PostacGracza << endl; cout << endl; cout << "Gracz wybral: " << WK.PostacGracza << " nr. postaci gracza " << WK.NrPostaciGracza << endl; cout << "Wrog wybral: " << WK.PostacWroga << " nr. postaci wroga " << WK.NrPostaciWroga << endl; cout << endl; }
int Wrog_Wybiera() { WyboryKlasy WK; srand( time( NULL ) ); WK.NrPostaciWroga =(( rand() % 3 ) + 1 ); if( WK.NrPostaciWroga == 1 ) { WK.PostacWroga = "Wojownik"; } if( WK.NrPostaciWroga == 2 ) { WK.PostacWroga = "Magik"; } if( WK.NrPostaciWroga == 3 ) { WK.PostacWroga = "Paladin"; } cout << "Twoim przeciwnikiem bedzie: " << WK.PostacWroga << endl << endl; cout << "Gracz wybral: " << WK.PostacGracza << " nr. postaci gracza " << WK.NrPostaciGracza << endl; cout << "Wrog wybral: " << WK.PostacWroga << " nr. postaci wroga " << WK.NrPostaciWroga << endl << endl; }
int Podsumowanie_Wyboru() { WyboryKlasy WK; cout << endl; cout << "Gracz wybral: " << WK.PostacGracza << " nr. postaci gracza " << WK.NrPostaciGracza << endl; cout << "Wrog wybral: " << WK.PostacWroga << " nr. postaci wroga " << WK.NrPostaciWroga << endl; }
int main() { WyboryKlasy WK; Informacje_o_postaciach(); Gracz_Wybiera(); Wrog_Wybiera(); Podsumowanie_Wyboru(); cout << endl; cout << "Gracz wybral: " << WK.PostacGracza << " nr. postaci gracza " << WK.NrPostaciGracza << endl; cout << "Wrog wybral: " << WK.PostacWroga << " nr. postaci wroga " << WK.NrPostaciWroga << endl; }
Za wskazanie błędu lub wskazanie tego co źle zrozumiałem mogę jedynie podziękować |
|
Savail |
» 2013-02-24 09:37:42 Masz inne wartości w innych funkcjach bo w każdej tworzysz nowy obiekt klasy WyboryKlasy zamiast operować na jednym tym samym obiekcie. Możesz utworzyć statyczny obiekt klasy WyboryKlasy: #include <iostream> using namespace std; class WyboryKlasy { public: static WyboryKlasy obiekt; int NrPostaciWroga; string PostacWroga; int NrPostaciGracza; string PostacGracza; WyboryKlasy(); }; WyboryKlasy WyboryKlasy::obiekt; WyboryKlasy::WyboryKlasy() { NrPostaciWroga; PostacWroga; NrPostaciGracza; PostacGracza; }
int main() { WyboryKlasy::obiekt; } Będzie wspólny dla każdego obiektu klasy i można się do niego odwołać w ten sposób: WyboryKlasy::obiekt; Możesz utworzyć globalny obiekt klasy lub przesyłać do każdej funkcji referencję / wskaźnik do obiektu który tworzysz w main. |
|
« 1 » |