Ja pierrniczę, wiem już co źle zrobiłem
Faktycznie - jeśli argument funkcji nazywa się tak samo jak pole klasy istotny jest własnie ten ,,this".
Z przekazaniem wskaźnika, domyślnie NULLa, chodziło mi o to by konstruktor domniemany inicjalizował wszystkie pola klasy z otrzymanej listy argumentów. Czy to konieczne? Szczerze mówiąc nie wiem. Natomiast gdy zmieniłem konstruktor domniemany na:
Kod: Zaznacz cały
Pociag(int liczbaWagonow=5, std::string nazwaPociagu="Wacek");
Kod: Zaznacz cały
Pociag::Pociag(int liczbaWagonow, std::string nazwaPociagu){
(...)
}
W pliku main.cpp dostaję błąd:
main.cpp:16: undefined reference to `Pociag::Pociag(int, std::string, Wagon*)'.
Czyli tak jakby faktycznie standard wymagał, bym w konstruktorze domniemanym inicjalizował każde z pól klasy ,,z zewnątrz", czyli z argumentów które dostaje konstruktor. Natomiast w Symfonii Grębosz pisze:
Kostruktorem, który można wywołać bez żadnych argumentów jest na przykład konstruktor ze wszystkimi argumentami domniemanymi
Z czego wnioskuję, że chodzi o argumenty domniemane konstruktora, a nie pola klasy, gdyż konstruktor może 1 argument przyjmować a pól klasy może być wiele.
Dość dziwne to, wychodzi na to że autor tutaj chyba się myli, o ile dobrze odczytuję jego słowa**.
Co powinieneś zrobić, jeżeli ten argument nie jest nullem?
Fakt, zgubię wtedy to co przekazałem
Dobrym rozwiązaniem jest alokacja tylko wtedy, gdy (!wagony) ?
**
No i chyba jednak nie, dopisuje sobie zmienne w klasie Pociąg i kompilator nie zgłasza błędu o niezdefiniowanej referencji. Tak jakby przy tamtym błędzie zapisał gdzies sobie, że miał konstruktor z 3 argumentami i nie chciał z takowego zrezygnować.