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

[C++] Wskaźnik do obiektu. Jak przesunąć na kolejny obiekt.

Ostatnio zmodyfikowano 2017-06-26 07:23
Autor Wiadomość
radek04
Temat założony przez niniejszego użytkownika
[C++] Wskaźnik do obiektu. Jak przesunąć na kolejny obiekt.
» 2015-04-05 16:46:51
Mam utworzoną klasę Osoba z polami w postaci danych osobowych (Imię, Nazwisko itp.).
Po utworzeniu wszystkich obiektów (person_0, person_1 ... person_5) program ma sprawdzić, czy wszystkie dane zostały uzupełnione. W przypadku braku jakiejkolwiek, wywołuję destruktor.
Chcę to zrobić w pętli. Próbowałem z użyciem referencji i wskaźników, ale stanąłem na przesunięciu wskaźnika na kolejny obiekt. Można to jakoś zrobić?
Jestem początkujący zarówno w klasach, jak i wskaźnikach.
C/C++
Osoba * sprawdzany; //wskaznik do obiektow typu Osoba; potrzebny do sprawdzenia kompletnosci danych

for( sprawdzany = & person_0; i < 6; i++ )
{
    cout << "Sprawdzam kompletnosc danych osobowych obiektu " << sprawdzany->Imie << " " << sprawdzany->Nazwisko << ".";
    if( sprawdzany->Imie == "brak" || sprawdzany->Nazwisko == "brak" || sprawdzany->Data_urodzenia == "brak" || sprawdzany->Plec == "brak" || sprawdzany->Miasto == "brak" )
    {
        sprawdzany->~Osoba();
    }
    else { cout << "\nDane kompletne.\n\n"; }
    sprawdzany++; //tutaj jest blad - chce przesunac wskaznik na kolejny obiekt
}
Zamiast sprawdzany++ próbowałem też
sprawdzany += sizeof( Osoba )
Powyższy kod oczywiście nie kompiluje się z powodu różnych typów Osoba i int, albo operatora ++ lub += (w zależności od moich różnych kombinacji i wariacji gwiazdek *, ampersandów &, operatorów rzutowania itp.).
P-130187
Monika90
» 2015-04-05 16:55:00
Co to jest person_0?


 
sprawdzany->~Osoba();
Jawne wywoływanie destruktora zostaw ekspertom.


 
sprawdzany++;
Z tego co widzę to nie jest wskaźnik do elementu tablicy, więc zwiększanie go o jeden nie skończy się dobrze.

Jeżeli chcesz mieć kilka obiektów klasy Osoba, to użyj tablicy, albo std::vector<Osoba>
P-130189
radek04
Temat założony przez niniejszego użytkownika
» 2015-04-05 17:13:35
Tak, dobrze piszesz. Ale takie mam zadanie, by jawnie wywołać destruktor. I ma być bez tablicy.
person_0 to pierszy obiekt klasy Osoba. Zakładając (o ile to ma sens), że ww. obiekty są umieszczone w pamięci obok siebie, czy da się jakoś przesuwać wskaźnik między nimi (podobnie jak w tablicy)?
P-130191
Monika90
» 2015-04-05 17:23:18
Zakładając (o ile to ma sens), że ww. obiekty są umieszczone w pamięci obok siebie, czy da się jakoś przesuwać wskaźnik między nimi (podobnie jak w tablicy)?
Jeżeli to są zmienne lokalne to nie można czynić takich założeń.

Ale takie mam zadanie, by jawnie wywołać destruktor. I ma być bez tablicy.
Można alokować tablicę bajtów w której pomieści się n obiektów i tworzyć te obiekty za pomocą placement new, wtedy będzie można wywoływać jawnie destruktor. No ale jak nie ma być tablicy to tak się nie da, w tej sytuacji jedyne co mi przychodzi do głowy to unia. Składowe unii można (trzeba) jawnie tworzyć i jawnie niszczyć.
P-130192
radek04
Temat założony przez niniejszego użytkownika
» 2015-04-05 17:33:46
Cały projekt mam w 1 pliku main.cpp. Klasa jest zadeklarowana na początku pliku, więc jest globalna. Obiektu są tworzone w czasie trwania programu, ale między nimi nie jest definiowany żadna zmienna, funkcja, czy jakikolwiek inny obiekt.
Tablicy ma nie być do obiektów, poza tym nie będzie problemu, jeśli jej użyję.

Oczywiście mogę każdy obiekt sprawdzić po kolei (jest ich tylko 6).
Szukam rozwiązania do sprawdzenia w pętli, ale tylko tak, by miało to "ręce i nogi". Nic na siłę. Więc proszę o rozwiązanie, jeśli będzie sensowne.

To projekt na zajęcia, stąd takie dziwne założenia.
P-130193
pekfos
» 2015-04-05 17:35:55
Alokuj obiekt dynamicznie, wtedy ręcznie go zwalniając, siłą rzeczy wywołujesz destruktor. A co do tablicy..
C/C++
Typ & tablica( std::size_t i )
{
    switch( i )
    {
    case 0: return obj0;
    case 1: return obj1;
    case 2: return obj2;
        // itd.
    }
}

tablica( 3 ) = costam;
P-130194
Monika90
» 2015-04-05 17:42:09
Najlepiej pokaż treść tego zadania
P-130195
notabigthreat
» 2015-04-05 17:43:28
Tablicy ma nie być do obiektów, ale czy może być tablica wskaźników na obiekty?
P-130196
« 1 » 2 3
  Strona 1 z 3 Następna strona