Tablica obiektów

0

Witam,

utworzyłem klasę:

struct Pracownik {

	string	 imie;
	string	 nazwisko;
	int		 ID;
	long int pensja;


	void dodaj();


};

a teraz chciałbym stworzyć tablicę 20 obiektów klasy Pracownik:

Pracownik tab[20];

Czy ktoś z Was może mi powiedzieć jak to zrobić żeby za każdym razem kiedy wywołam funkcję

dodaj(); 

do tablicy dopisywał się nowy obiekt? Gdzieś chyba muszę zapamiętać liczbę pracowników, żeby dopisywać od tego miejsca w tablicy. Niestety nie wiem jak to technicznie rozwiązać, aby było poprawnie.

1
 
void dodaj(std::vector<Pracownik*>& p) {
   p.push_back(new Pracownik);
}

std::vector<Pracownik*> pracownicy;
dodaj(pracownicy);
0

Zimny Szczur dziękuję :)

1

Pamiętaj tylko o delete albo użyj smart ptr

1

ee a po co wskaźniki i bawienie w new i delete?
Te dodaj w pracowniku to trochę bez sensu moim zdaniem.

teraz chciałbym stworzyć tablicę 20 obiektów klasy Pracownik

std::array<Pracownik, 20> pracownicy;
2

Nie rób tak - obiekt nie powinien nic wiedzieć o miejscu, gdzie jest przechowywany (połączone jest to z prawem Demeter), a oprócz tego nie jest ta metoda dodaj w żaden bezpośredni sposób powiązana z obiektem (nie odnosi się jego pól, jak mniemam).

0

Jak więc należy rozwiązać ten problem? Zmodyfikowałam klasę i aktualnie wygląda ona tak:

class Pracownik {


	string imie;
	string nazwisko;

	long int wyplata;


	Pracownik::Pracownik(string ximie,  string xnazwisko) {

		imie = ximie;
		nazwisko = xnazwisko;


	}

W dalszej części programy wczytuję

 imię

i nazwisko

 z klawiatury. Jak więc mogę utworzyć nowy obiekt po każdym takim wczytaniu?
1

Musisz zrobić ten konstruktor jako publiczny.

Potem po prostu takie coś

std::cin>>imie;
std::cin>>nazwisko;

Pracownik pracownik(imie, nazwisko);

Zainteresuj się też terminem lista inicjalizacyjna (:

0
class Pracownik
  {
   string imie,nazwisko;
   long int wyplata;
   Pracownik::Pracownik(const string &imie,const string &nazwisko,long int wyplata=0):imie(imie),nazwisko(nazwisko),wyplata(wyplata) {}
   friend istream &operator>>(istream &s,Pracownik &p) { return s>>imie>>nazwisko>>wyplata; }
  };

...
Pracownik p;
cin>>p;

1 użytkowników online, w tym zalogowanych: 0, gości: 1