radek04 Temat założony przez niniejszego użytkownika |
» 2015-04-05 17:46:52 Raczej tak, może być.
Treść zadania: 1. Utwórz klasę osoba, która będzie przechowywała elementarne dane osobowe (imię, nazwisko, data urodzenia, płeć, miasto) oraz pole identyfikatora typu int o nazwie id. 2. Identyfikator danej osoby powinien być unikalny dla każdego obiektu i automatycznie nadawany w momencie tworzenia obiektu klasy osoba. 3. Utwórz funkcje składowa klasy, która zwróci numer ostatnio nadanego identyfikatora w klasie osoba. Funkcja powinna być możliwa do wywołania nawet gdy nie istnieje żaden obiekt klasy osoba. 4. Zdefiniuj wewnątrz klasy osoba konstruktory które umożliwią tworzenie obiektów tej klasy na okoliczność podania różnych danych nowo tworzonej osoby. 5. Zdefiniuj w klasie osoba funkcję pozwalającą na przedstawienie obiektów z danej klasy. 6. Dodaj do klasy osoba pole które zwróci ilość aktualnie istniejących obiektów klasy osoba.
Dodatkowo jest warunek, by destruktor usuwał obiekty z niepełnymi danymi osobowymi.
A propos tablicy obiektów, to może (bardziej dla ćwiczeń), spróbuję też z tablicą obiektów. Niestety to, co pisał pekfos, nie do końca rozumiem, a póki co słabo z czasem, by się tego uczyć.
|
|
notabigthreat |
» 2015-04-05 18:27:11 To może zrób tą tablicę wskaźników i ustaw ją na osoby. Plus minus coś takiego: Osoba * wskazniczki_hehe[ 6 ];
for( int i = 0; i < 6; ++i ) { cin >> wskazniczki_hehe[ i ]->Imie; }
Jest jeszcze inna, wydaje się, znacznie prostsza opcja: stwórz konstruktor dla klasy Osoba tylko taki, który ustawia już wszystkie pola. W ten sposób nigdy nie musisz wywoływać destruktora (zgodnie z treścią zadania - w końcu odpowiednie zmienne za każdym razem ustawiasz). Nie wiem, czy coś takiego jest tu dopuszczalne. class Osoba { string imie; string nazwisko; public: Osoba( string jakie_ma_byc_imie, string jakie_ma_byc_nazwisko ) { if(( jakie_ma_byc_imie == "" ) ||( jakie_ma_byc_nazwisko == "" ) ) imie = jakie_ma_byc_imie; nazwisko = jakie_ma_byc_nazwisko; } };
int main() { Osoba osob3( "Jan", "Kowalski" ); string im_wczyt; string nazw_wczyt; cin >> im_wczyt >> nazw_wczyt; Osoba osob4( im_wczyt, nazw_wczyt ); }
Logicznie (?) - jak klasa ma jakieś pola, to niech sama o nie zadba! Tak, wiem, trochę cwaniacko wyszło. |
|
radek04 Temat założony przez niniejszego użytkownika |
» 2015-04-05 18:31:33 Tak właśnie (a przynajmniej podobnie) zrobiłem. Każde pole z danymi osobowymi jest typu string i ma wstępnie wartość "brak". A program usuwa (wywołuje destruktor) obiekty, które mają ww. pola właśnie z wartością "brak". Edit. A jak ustawić wskaźnik? wskazniczki_hehe[ i ] = Osoba Chyba nie tak??? |
|
notabigthreat |
» 2015-04-05 18:39:35 wskazniczki_hehe[ i ] = new Osoba( );
Ewentualnie "na chama": stworzyć obiekt, a później zająć się wskaźnikiem. Osoba ja( "radek", "04" );
wskazniczki_hehe[ i ] = & ja;
@EDIT: Jestem (na dość niewiele procent, ale jednak) pewien, że do jutra spotkasz kogoś o nazwisku "brak". Tak, małą literą. A w ogóle, to może niech obiekt sam się dekonstruuje, jak zobaczy, że czegoś nie ma, np. po wywołaniu jakiejś funkcji? void SprawdzCzyWszystkoJest() { if( nie ma wszystkiego ) this->~Osoba(); }
|
|
Monika90 |
» 2015-04-05 19:04:25 W zadaniu nic nie ma o tym by jawnie wywoływać destruktor, więc nie rób tego, bo nie wiesz jak to działa i jakie ma konsekwencje.
Nie widzę też tam zakazu używania tablic. |
|
radek04 Temat założony przez niniejszego użytkownika |
» 2015-04-05 19:30:17 O destruktorze było dopowiedziane na zajęciach. Co do tablic, to OK, zgadzam się, że nie ma zakazu. Jednak moje pytanie dotyczy przypadku bez tablicy obiektów. Jeśli tego się nie da zrobić, to OK. Aleśli można, to chcę sie dowiedzieć jak. Niekoniecznie muszę zaraz tego użyć, bo nie lubię używać rzeczy, których nie rozumiem. Czy operator new pozwoli na "przesuwanie" wskaźnika (z tablicy) na kolejne obiekty danej klasy? |
|
notabigthreat |
» 2015-04-05 19:54:32 Nie za bardzo. Te osoby nie muszą być koło siebie. Pomimo tego, wskaźniki na osoby SĄ rozmieszczone jeden po drugim w tablicy wskazniczki_hehe. Z tego powodu możesz przesuwać wskaźnik na wskaźniki za pomocą ++ i --. |
|
radek04 Temat założony przez niniejszego użytkownika |
» 2015-04-05 20:16:25 Mogę prosić o konkretny przykład, jak mógłbym tego użyć? |
|
1 « 2 » 3 |