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ść
notabigthreat
Przykład trudny
» 2015-04-05 23:42:55
Klasę Osoba trochę uprościłem, nie ma ona tu destruktora.
C/C++
//Historia niejakiej osoby nr 2 względnie trzy:
#include <string>
#include <iostream>
using namespace std;
class Ocena
{
public:
    string imie;
    string nazwisko;
    Ocena( string i, string n )
    {
        imie = i;
        nazwisko = n;
    }
    //kod z "brak"...
};

int main()
{
    Ocena * w_hehe[ 6 ];
    string im_wczyt;
    string nazw_wczyt;
    for( int i = 0; i < 6; ++i )
    {
        cin >> im_wczyt;
        cin >> nazw_wczyt;
        w_hehe[ i ] = new Ocena( im_wczyt, nazw_wczyt ); //od teraz wskaźnik w_hehe[i] jest dobrze ustawiony
    }
    Ocena ** wsk_na_wsk_na_O = w_hehe; //"nazwa tablicy jest adresem zerowego elementu"
    //to samo inaczej:
    //wsk_na_wsk_na_O = &(w_hehe[0]);//tak, można brać adres wskaźnika - i go przechować!
   
    ++wsk_na_wsk_na_O; //od teraz pokazuje na w_hehe[1]
   
    delete * wsk_na_wsk_na_O; //delete wsk_na_O - gwiazdka przed po prostu usuwa "wsk_na"
    * wsk_na_wsk_na_O = nullptr; //starszy kompilator może nie przełknąć, wtedy: NULL (adres 0)
    //JEDYNKA JEST MARTWA
    ++wsk_na_wsk_na_O; //od teraz pokazuje na w_hehe[2]
   
    ( ** wsk_na_wsk_na_O ).imie = "Jan Maria"; //czas wyjawić twe prawdziwe imię, Janie Mariu bez nazwiska...
    ( * wsk_na_wsk_na_O )->nazwisko = "beznazwiska"; //uff... było blisko...
    //możemy iść naprzód...
    ++wsk_na_wsk_na_O; //od teraz pokazuje na w_hehe[3]
    //ale najpierw...
    //...
    //*chwila grozy*
    ( *( wsk_na_wsk_na_O - 1 ) )->nazwisko = "brak"; //bo zmienił se swój brak nazwiska
    //jak zmienialiśmy o jedynkę za pomocą --/++, to czemu nie i tak?
    //(tak samo jak przy int'ach, ale tu 1 oznacza "o obiekt dalej/wcześniej"
    //(czyli: nasz ulubieniec!)
   
    cout << "Troche namieszalismy przy twoich nazwiskach. Takie zycie.\nPelna lista:\n";
    for( int i = 0; i < 6; ++i )
    {
        if( w_hehe[ i ] == nullptr )
             cout << "Ta osoba nie zyje. Taka smierc.\n";
        else
        {
            cout <<(( w_hehe[ i ] )->imie ) << ' ' <<(( w_hehe[ i ] )->nazwisko ) << '\n';
        }
    }
    //...
    //i reszta kodu się psuje z powodu "brak"...
   
    //uwaga:
    //wsk_na_wsk_na_O->costam;//bląd
    //nie ma sensu - bo to jest +- równe (*(wsk_na_wsk_na_O)).costam,
    //a *(wsk_na_wsk_na_O) jest typu wskaźnika.
    //Wskaźniki nie mają składowych, by się do nich odnosić kropką!
}
Jak uda ci się przeczytać, to serdecznie gratuluję.
P-130225
radek04
Temat założony przez niniejszego użytkownika
» 2015-04-06 07:32:09
Przeczytałem.
Przede wszystkim dzięki za włożoną pracę. Ale pisałem, że zaczynam ze wskaźnikami dopiero :)
Dobrze zrozumiałem, że jest tablica wskaźników oraz kolejne wskaźniki wskazujące na te pierwsze?
P-130226
notabigthreat
» 2015-04-06 13:55:24
Chyba tak.
P-130246
TenTyp
» 2017-06-26 07:23:24
@notabigthreat

Ja również serdecznie dziękuję za Twoje poświęcenie, dzięki Tobie i ja wreszcie zrozumiałem w miarę wskaźniki, wskaźniki wskaźników, tablice wskaźników i co najważniejsze fabrykę obiektów.

Dziękuję :-)
P-162823
1 2 « 3 »
Poprzednia strona Strona 3 z 3