Tablica wskaźników do obiektów - tworzenie obiektu za pomocą operatora 'new'.
Ostatnio zmodyfikowano 2016-12-18 02:04
latajacaryba Temat założony przez niniejszego użytkownika |
Tablica wskaźników do obiektów - tworzenie obiektu za pomocą operatora 'new'. » 2016-12-18 01:32:23 Witam. Na początek przykład, proszę spojrzeć: class Ram { string firma; int pojemnosc; public: void informacje() { cout << "firma " << firma << " pojemnosc " << pojemnosc << " gb.\n"; } Ram( string ffirma, int ppojemnosc ) : pojemnosc( ppojemnosc ) , firma( ffirma ) {; } };
int main() { Ram * kosci[ 4 ]; string firma; int ile_kosci, wielkosc_ramu; cout << "podaj ile slotow ma byc zajete(1-4): "; cin >> ile_kosci; for( int i = 0; i < ile_kosci; i++ ) { cout << "wpisz firme " <<( i + 1 ) << " kosci: "; cin >> firma; cout << "wpisz ilosc ramu (w gb): "; cin >> wielkosc_ramu; cout << endl << endl; kosci[ i ] = new Ram( firma, wielkosc_ramu ); } ( * kosci )[ 1 ].informacje();
Problem jest następujący: Kiedy podamy parametry np. 2 kości i wywolamy funkcję ( * kosci )[ 1 ].informacje(); wyskakuje błąd krytyczny. Dlaczego? Przecież Mamy utworzone za pomocą wskaźników 2 obiekty typu ram. na jeden wskazuje kosci[0] a na drugi kosci[1]. Tak więc wszystko powinno się udac. Co ciekawe przy wywołaniu funkcji ( * kosci )[ 2 ].informacje(); (przy stworzeniu po jednym obiektu dla każdego wskaźnika) wypisuje się zawartość drugiej kości, a przecież numerujemy od 0, więc powinna pokazać się specyfikacja kości trzeciej. Proszę o pomoc. |
|
pekfos |
» 2016-12-18 01:38:41 ( * kosci[ 1 ] ).informacje() kosci[ 1 ]->informacje()
|
|
carlosmay |
» 2016-12-18 01:48:55 int main() { Ram * kosci[ 4 ]; string firma; int ile_kosci, wielkosc_ramu; cout << "podaj ile slotow ma byc zajete(1-4): "; cin >> ile_kosci; for( int i = 0; i < ile_kosci; i++ ) { cout << "wpisz firme " <<( i + 1 ) << " kosci: "; cin >> firma; cout << "wpisz ilosc ramu (w gb): "; cin >> wielkosc_ramu; cout << endl << endl; kosci[ i ] = new Ram( firma, wielkosc_ramu ); } for( int i = 0; i < ile_kosci; ++i ) { kosci[ i ]->informacje(); } for( int i = 0; i < ile_kosci; ++i ) { delete kosci[ i ]; } } |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-12-18 02:04:41 @pekfos Dzięki @Carlos kosci[ i ]->informacje(); Nie używam bo nie lubię tego zapisu :/ Z drugiej strony zapominam, że istnieje. Wiem jak działa, ale... wydaje mi się to jakieś takie dziwne... Jakby wyrwał się z szeregu. Pamięć miałem zwolnić później, bo te obiekty będą mi jeszcze potrzebne, ale faktycznie w tym wyciętym przykładzie zapomniałem. Dzięki za pomoc, temat zamykam :)) |
|
« 1 » |