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

Vector do przechowywania obiektów klasy.

Ostatnio zmodyfikowano 2019-01-06 16:08
Autor Wiadomość
Amy_Carrax
Temat założony przez niniejszego użytkownika
Vector do przechowywania obiektów klasy.
» 2019-01-05 21:46:28
Piszę prosty program do ewidencji osób. Niestety, w poleceniu nie zostało przewidziane jak duża ma to być ewidencja,
stąd pomysł aby uciec się do użycia vectorów. Definiowanie obiektów klasy "osoba1, osoba2, osoba3..." mija się tu z celem.

Jestem początkującą osobą, mój program do tej pory posiadał jedynie vector wskaźników na obiekty klasy, przez co (tak myślę) źle zapisywał dane (adresy były określone przez wskaźniki, ale nie tworzyłam nazw dla obiektów klasy, któż wie ile ich będzie) i przy dodawaniu szóstego obiektu kończył pracę zwracając wartość 3221225477.

W zaistniałej sytuacji potrzebuję stworzyć vector obiektów klasy. Klasa ma 9 danych składowych typów const * char oraz int. Czy aby zapisywać dane w vectorze muszę tworzyć 9-wymiarowy vector wewnątrz klasy, czy można zwyczajnie w funkcji main utworzyć działający bez zarzutu vector jednowymiarowy, który będzie zawierał wszystkie informacje o obiekcie klasy?

Czy ten sposób myślenia jest poprawny? Przedstawione fragmenty kodu z funkcji main.

Deklaracja:

C/C++
vector < Osoba *> person;
vector < Osoba > ewidencja;
Osoba * wsk;
wsk = new Osoba;

i w pętli:

C/C++
person.push_back( wsk );
person[ i ] = & ewidencja[ i ];

(Pod koniec pętli oczywiście inkrementacja wskaźnika *wsk)

Tutaj chciałabym wczytać dane z klawiatury do vectora. 8 danych składowych klasy. Jak to zrobić?
Będę wdzięczna za wszelkie odpowiedzi.
P-173426
pekfos
» 2019-01-05 22:19:49
Zrób po prostu
C/C++
vector < Osoba > ewidencja;
Bez żadnych wskaźników.
P-173427
Amy_Carrax
Temat założony przez niniejszego użytkownika
» 2019-01-06 14:05:56
okej, ale jak wtedy zapisywac dane składowe do takiego vectora? Do tej pory robiła to funkcja zapamiętaj, za pomocą wskaźnika

C/C++
wsk->zapamietaj( p, o1, o2, o3, o4, o5, o6, o7, o8 );

C/C++
void Osoba::zapamietaj( const char * s, const char * name, const char * surr, const char * color, int height, int dd, int mm, int yy, int age ) {
    strcpy( imie,( name ? name: "no name" ) );
    strcpy( nazwisko,( surr ? surr: "no surrname" ) );
    strcpy( plec,( s ? s: "niezidentyfikowano" ) );
    strcpy( koloroczu,( color ? color: "-" ) );
    wzrost = height;
    day = dd;
    month = mm;
    year = yy;
    wiek = age;
}

I tutaj przy szóstym takim wywołaniu program się wysypywał zwracając kosmiczną wartość opisaną w temacie wątku.

Jak przesłać do jednowymiarowego vectora te wszystkie dane? Podejżewam że zwykłe

C/C++
ewidencja.push_back();

tutaj nie zadziała, bo i jak podać tu 9 argumentów, skoro funkcja wymaga jednego. Musiałabym tworzyć standardowe obiekty i przesyłać je pojedynczo do vectora, a w tym wypadku vector mi nie potrzebny.
P-173434
pekfos
» 2019-01-06 16:08:39
C/C++
Osoba osoba;
osoba.zapamietaj( a, b, c, d, e, f...);
ewidencja.push_back( osoba );
P-173435
« 1 »
  Strona 1 z 1