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

Klasy zagnieżdżone

Ostatnio zmodyfikowano 2014-11-09 18:24
Autor Wiadomość
lshadown
Temat założony przez niniejszego użytkownika
Klasy zagnieżdżone
» 2014-11-08 14:57:08
Witajcie mam problem, muszę napisać program na klasach i klasy muszą być zagnieżdżone. Prubuje się dostać z klasy nadrzędnej do podrzędnej w celu tworzenia tablicy wskaźników i mam problem gdyż cały czas wyświetla mi błąd. Nie wiem może ja coś robię źle , proszę o pomoc. Z góry dziękuje.

Plik z klasami :
C/C++
class Pracownik
{
    // Pracownik
private:
    string Imie;
    string Nazwisko;
    int numer;
public:
    Pracownik() { Zarobki * zarobki = new Zarobki; };
    int getZarobki() { Zarobki zarobki; return zarobki.getZarobki(); }
    void add_worker( Pracownik( ** dane ), int wprowadzeni );
    void search_pracownika();
    void reamove_pracownika();
    void print();
    string get_placuwka() { Placowka placuwka; return placuwka.get_placowka(); }
    class Zarobki
    {
        //Zarobki
    private:
        double zarobki;
        double pensja;
        int stawka_godzina;
    public:
        int getZarobki() { return stawka_godzina; };
    };
    Zarobki * temp;
    class Placowka
    {
        // Placowki firmy
    private:
        string Miasto;
    public:
        string get_placowka() { return Miasto; };
    };
   
};
//---------------------------------------------ALOKACJA PAMIECI---------------------------------------------
Pracownik * pracownik = new Pracownik;

Oraz fragment gdzie próbuje się dostać do klasy Zarobki :
C/C++
int stawka;
//----------------------------------WCZYTYWANIE DANYCH O PRACOWNIKACH---------------------------------------
cout << " Imie: ";
cin >> pracownik->Imie;
cout << endl << " Nazwisko: ";
cin >> pracownik->Nazwisko;
cout << endl << " Nr pracownika: ";
cin >> pracownik->numer;
cout << endl << " Stawka za godzine: ";
cin >> stawka;
pracownik->temp->getZarobki.getZarobki() = stawka;
cout << endl << " Miasto placiwki: ";
cin >> pracownik->get_placuwka();
P-120169
Monika90
» 2014-11-08 15:01:45
cały czas wyświetla mi błąd
Jaki błąd, w której linii?

To
C/C++
pracownik->temp->getZarobki.getZarobki() = stawka;
jest bez sensu. Dodaj do klasy Zarobki funkcję set_stawka(int).
P-120170
lshadown
Temat założony przez niniejszego użytkownika
» 2014-11-08 15:05:43
Czyli co mam dodać do klasy Zarobki metodę :
C/C++
setstwaka( int );
 I tyle bo nie rozumiem
Nie wiem w jaki sposób mam się dostać do tej klasy.
P-120171
Tomek_z_W11
» 2014-11-09 13:37:00
Koledze chodzi o to, że funkcja getZarobki() zwraca jakąś wartość - jakieś zarobki,
pracownik->temp->getZarobki.getZarobki() = stawka, jest bez sensu, bo jak chcesz pod wywołanie funkcji, która coś zwraca przypisać wartość?
Dlatego zaproponował bardzo dobre rozwiązanie, dodać do klasy Pracownik, albo do klasy Zarobi, albo Pracownik (za bardzo się nie wgłębiałem, ale to bez znaczenia chyba) metodę set_Zarobki(int), która otrzymany w parametrze int, przypisze do odpowiedniego pola. Jak by to mniej więcej miało wyglądać?

void set_Stawka(int a)
{
    Zarobki=a;
}

taką metodę definiujesz sobie w klasie powiedzmy, a potem w mainie ją wywołujesz tak:

tmp->set_Stawka(stawka); //wczesniej musisz zadeklarowac tmp, jako wskaznik na klase Zarobki, albo klasę Pracownik - zależy gdzie tę metodę zdefiniujesz. Np. Pracownik *tmp;

Oczywiście zakładam, że w klasie Pracownik, albo w klasie Zarobki masz pole Zarobki, albo Stawka.
Jak dostać się do klasy? Normalnie, tak jak napisałem. Jeżeli metoda będzie publiczna, to możesz się do niej odwoływać w każdym momencie w programie.
P-120212
michal11
» 2014-11-09 17:19:15
@up
1. Koleżance a nie koledze.
2. Jeżeli funkcja zwracałaby referencję to można by było przypisać coś do obiektu zwracanego przez getZarobki().
P-120220
Tomek_z_W11
» 2014-11-09 18:24:11
Faktycznie, o tym nie pomyślałem, tak czy siak, Twoja funkcja nie zwraca referencji :)
P-120229
« 1 »
  Strona 1 z 1