Klasy zagnieżdżone
Ostatnio zmodyfikowano 2014-11-09 18:24
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 : class 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 { private: double zarobki; double pensja; int stawka_godzina; public: int getZarobki() { return stawka_godzina; }; }; Zarobki * temp; class Placowka { private: string Miasto; public: string get_placowka() { return Miasto; }; }; };
Pracownik * pracownik = new Pracownik;
Oraz fragment gdzie próbuje się dostać do klasy Zarobki : int stawka;
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();
|
|
Monika90 |
» 2014-11-08 15:01:45 cały czas wyświetla mi błąd |
Jaki błąd, w której linii? To pracownik->temp->getZarobki.getZarobki() = stawka;
jest bez sensu. Dodaj do klasy Zarobki funkcję set_stawka(int). |
|
lshadown Temat założony przez niniejszego użytkownika |
» 2014-11-08 15:05:43 Czyli co mam dodać do klasy Zarobki metodę : I tyle bo nie rozumiem Nie wiem w jaki sposób mam się dostać do tej klasy. |
|
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. |
|
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(). |
|
Tomek_z_W11 |
» 2014-11-09 18:24:11 Faktycznie, o tym nie pomyślałem, tak czy siak, Twoja funkcja nie zwraca referencji :) |
|
« 1 » |