Tworzenie nowego obiektu przez funkcje
Ostatnio zmodyfikowano 2015-07-13 23:05
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? 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 = ustal3(); ob1.pokazWszystko(); system( "PAUSE" ); } |
|
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)? int * zle_napisana_funkcja() { int abc = 0; return & abc; }
|
|
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. |
|
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. |
|
« 1 » |