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

Tworzenie nowego obiektu przez funkcje

Ostatnio zmodyfikowano 2015-07-13 23:05
Autor Wiadomość
mituri
Temat założony przez niniejszego użytkownika
Tworzenie nowego obiektu przez funkcje
» 2015-07-11 00:32:54
Witam!

Robie obiekt ktory zachowuje sie jak lista jednokierunkowa. Program dziala gdy tworze nowy obiekt w main() i przypisuje mu kilka elementow, nastepnie wsywietla te obiekty. Mam pewien problem, przez ktory stoje 3 dzien. Chce w mainie stworzyc obiekt, i jakos przez funkcje lub metode zmodyfikowac ja tak aby finalnie zwracała obiekt ktory ma doczepione kolejne elemenety(ktore znajduja sie w funkcji). Nastepnie chce wyswietlic elementy tego obiektu. Czy ma ktos pomysl jak to zrobic?
C/C++
class obiekt {
private:
    int a;
    obiekt * next;
public:
   
    obiekt( int _a ) {
        a = _a;
        next = NULL;
    }
    obiekt( const obiekt & _ob ) {
        a = _ob.a;
        next = _ob.next;
    }
   
    void setNext( obiekt * nextTmp ) { next = nextTmp; }
    obiekt * getNext() { return next; }
    void pokaz() { cout << a << endl; }
   
    void dodajNaKoniec( obiekt * nowy ) {
        obiekt * nextTmp = this;
        while( nextTmp->getNext() ) {
            nextTmp = nextTmp->getNext();
        }
        nextTmp->setNext( nowy );
    }
   
    void pokazWszystko() {
        obiekt * nextTmp = this;
        while( nextTmp->getNext() ) {
            nextTmp->pokaz();
            nextTmp = nextTmp->getNext();
        }
        nextTmp->pokaz();
    }
   
    obiekt * ustal() {
       
        obiekt ob1( 1 ), ob2( 2 ), ob3( 3 ), ob4( 4 );
        this->dodajNaKoniec( & ob1 );
        this->dodajNaKoniec( & ob2 );
        this->dodajNaKoniec( & ob3 );
        this->dodajNaKoniec( & ob4 );
       
        return this;
    }
};


void ustal2( obiekt & obTmp ) {
   
    obiekt ob1( 1 ), ob2( 2 ), ob3( 3 ), ob4( 4 );
    obTmp.dodajNaKoniec( & ob1 );
    obTmp.dodajNaKoniec( & ob2 );
    obTmp.dodajNaKoniec( & ob3 );
    obTmp.dodajNaKoniec( & ob4 );
   
}

obiekt * ustal3() {
    obiekt obTmp( 0 );
    obiekt ob1( 1 ), ob2( 2 ), ob3( 3 ), ob4( 4 );
    obTmp.dodajNaKoniec( & ob1 );
    obTmp.dodajNaKoniec( & ob2 );
    obTmp.dodajNaKoniec( & ob3 );
    obTmp.dodajNaKoniec( & ob4 );
   
    return & obTmp;
}

int main() {
   
    obiekt ob1( 1 ), ob2( 2 ), ob3( 3 ), ob4( 4 );
   
   
    /*
        ob1.dodajNaKoniec(&ob2);
        ob1.dodajNaKoniec(&ob3);
        ob1.dodajNaKoniec(&ob4);
        ob1.pokazWszystko();
        ob.1.pokazWszystko();
        */ //TO DZIALA
   
   
    //ustal2(ob1);// nie dziala
    * ob1 = ustal3(); // nie dziala
    ob1.pokazWszystko();
   
    system( "PAUSE" );
}
P-134560
notabigthreat
» 2015-07-11 14:55:09
Czy dobrze widzę, że w tej funkcjach ustal2 i ustal3 tworzysz obiekty lokalne, wychodzisz z niej i dalej używasz adresów tych obiektów (które przestały istnieć po opuszczeniu funkcji)?

C/C++
//wskaznik zwracany nie pokazuje na abc, bo nie ma abc
int * zle_napisana_funkcja()
{
    int abc = 0;
    return & abc;
}
P-134570
mituri
Temat założony przez niniejszego użytkownika
tak jest
» 2015-07-13 22:11:15
Zadna z tych funkcji nie działa wiec nie ma sie co nimi sugerowac.
P-134640
DejaVu
» 2015-07-13 23:05:53
Dynamiczna alokacja służy między innymi do tego, aby zaalokowany obiekt nie był niszczony po wyjściu z zasięgu widzenia zmiennej.
P-134642
« 1 »
  Strona 1 z 1