Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Znikające wartości zmiennych w klasach

Ostatnio zmodyfikowano 2013-02-24 09:37
Autor Wiadomość
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...

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
/* */ //To o tych zmiennych mowa
class WyboryKlasy {
public:
    int NrPostaciWroga;
    string PostacWroga;
    int NrPostaciGracza;
    string PostacGracza;
    WyboryKlasy();
};
WyboryKlasy::WyboryKlasy() {
    NrPostaciWroga;
    PostacWroga;
    NrPostaciGracza;
    PostacGracza;
}
/* */ //W każej funkcji są inne ,a na końcu nie wyświetla żadnych informacji
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;
    /*Wyswietla informacje o postaciach*/
    /* Czyli 33 liniji .... niepotrzebne tutaj (tak sądzę) */
}

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ć
P-76862
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:
C/C++
#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.
P-76863
« 1 »
  Strona 1 z 1