Tablica obiektów

Tablica obiektów
M2
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:31
0

Witam,

utworzyłem klasę:

Kopiuj
struct Pracownik {

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


	void dodaj();


};

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

Kopiuj
Pracownik tab[20];

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

Kopiuj
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.

edytowany 2x, ostatnio: maggy24
1
Kopiuj
 
void dodaj(std::vector<Pracownik*>& p) {
   p.push_back(new Pracownik);
}

std::vector<Pracownik*> pracownicy;
dodaj(pracownicy);
M2
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:31
0

Zimny Szczur dziękuję :)

1

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

stryku
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:607
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

Kopiuj
std::array<Pracownik, 20> pracownicy;
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
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).


edytowany 2x, ostatnio: Patryk27
M2
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:31
0

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

Kopiuj
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ę

Kopiuj
 imię

i nazwisko

Kopiuj
 z klawiatury. Jak więc mogę utworzyć nowy obiekt po każdym takim wczytaniu?
edytowany 1x, ostatnio: maggy24
stryku
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:607
1

Musisz zrobić ten konstruktor jako publiczny.

Potem po prostu takie coś

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

Pracownik pracownik(imie, nazwisko);

Zainteresuj się też terminem lista inicjalizacyjna (:

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0
Kopiuj
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;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.