Wpis z mikrobloga

#cpp #naukaprogramowania
Moglby mi ktos przystepnie wytlumaczyc czesc kodu zawartego ponizej?

struct osoba
{
string imie;
string nazwisko;
int wiek;
-----------------------------// odtąd nie bardzo rozumiem jak to ma dzialac

osoba *nastepna; // wskaźnik na następny element.
osoba(); // konstruktor. Czym tak naprawde jest konstruktor? Co to robi?
};

osoba::osoba() // co to jest?
{
nastepna = 0; // konstruktor??
}
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@wieczniezielony: koleeego, mamy tutaj strukturę danych typu lista jednokierunkowa.

Możesz to sobie wyobrazić jako naszyjnik z koralikami (niezapięty), gdzie masz z lewej strony pierwszy koralik, w którym są przechowywane dane i jedną z tych danych jest informacja, że po prawej stronie jest kolejny koralik (wskaźnik na strukturę danych osoba (osoba *nastepna))
No i po takim łańcuszku możesz sobie latać w prawo (bo, lista jest jednokierunkowa) i odczytywać dane jakie chcesz.
  • Odpowiedz
@wieczniezielony: Konstruktor konstruuje obiekt. Jest to funkcja, ktora jest wywolana jak tworzysz obiekt. Mozesz w nim np. ustawic wartosci poczatkowe/domyslne dla skladowych klasy, zaalokowac zasoby itd.
osoba *nastepna; to wskaznik na klase typu osoba. Zapewne chodzi o stworzenie listy osob w taki sposob, ze pierwsza wskazuje na nastepna itd.
osoba::osoba(){...} to implementacja funkcji osoba() z klasy osoba (w tym przypadku konstruktora)
nastepna = 0; ustawia wskaznik na 0 czyli, zeby
  • Odpowiedz
@wieczniezielony: konstruktor to taka specjalna "funckja" ktora inicializuje obiekt( przydział pamięci, ustawienie zmiennych obiektu itd itp). W C++ jest konwencja w której rozdzielamy definicje metod od deklaracji. I to zachodzi w tym przypadku; wyżej masz deklaracje konstruktora bezargumentowego a niżej masz definicję. Wewnątrz definicji wskaznik ustawiany jest na NULL (0)

Wskaźnik to taki specjalny typ danych, który przechowywuje adres pamięci pod którym znajduje się obiekt na który wskazuje wskaźnik

Sam
  • Odpowiedz
@wieczniezielony: a odnośnie konstruktora - ten konkretnie to nie robi nic. A ogólnie jest to funkcja, która się wykonuje zawsze kiedy tworzysz nową strukturę, powiedzmy: osoba nowa; (tak jak np. int zmienna; )
No i ogólnie to ten konstruktor pozwala na zrobienie czegoś takiego: int zmienna = 10; tylko, że dla struktury i możesz wpisać osoba nowa("Donald","Kaczynski",6);
  • Odpowiedz
@bl4desofglory: @NikczemnyPan: @simia: Pisze sobie teraz rozne rzeczy z tymi listami, czytam itd. I urodzilo sie pytanie. Wolam bo licze ze jeszcze pamietacie rozmowe i jestescie troszeczke w temacie.
Stworzylem cos takiego: (Zadziala-nie liczac drobnych bledow ktore pewnie sa? Czy to tez jest lista jednokierunkowa? Dlaczego tu nie musze uzywac konstruktorow?Czy jesli ta metoda jest ok to czy wstarczy ze bede znal tylko ja? Jest dla
  • Odpowiedz
@wieczniezielony: Generalnie musisz zrobic to co potrzebujesz zeby osiagnac swoj cel. Jesli dziala Tobie to co chciales, tak jak chciales bez konstruktorow to nie potrzebujesz konstruktorow ani zadnych innych rzeczy.

Natomiast jesli planujesz kiedys pracowac jako programista albo stworzyc projekt wiekszy niz 150 linii kodu to pewnie konstruktory sie Tobie przydadza. Oprocz tego przydadza sie Tobie rowniez:
- smart pointery (std::uniqueptr, std::sharedptr)
- rozsadne formatowanie
  • Odpowiedz