Mam pytanie - po co są konstruktory sparametryzowane? Po co się je używa? Wiem, jak je tworzyć, ale kompletnie nie mogę sobie ułożyć w głowie ich potrzeby.
@Samhain: Co rozumiesz przez sparametryzowany? Konstruktor przyjmujący argumenty?
struct Point
{
double x,y;
Point():x(0),y(0) {}
Point(double x,double y):x(x),y(y) {}
};
Z konstruktorem domyślnym: Point p; p.x=3; p.y=4;
Z drugim konstruktorem: Point p(3,4);
Mam nadzieje widzisz różnicę.
@Samhain: Zadaniem konstruktora jest poprawne skonstruowanie obiektu tak, żeby ten był gotowy do pracy przed jego użyciem. Niektóre typy danych muszą * przyjmować dane ze środowiska, żeby mieć sens - choćby taka klasa jak std::ifstream
, która stanowi abstrakcję do czytania plików. Konstruktor "sparametryzowany" przyjmie choćby ścieżkę do pliku (dana ze środowiska), aby poprawnie ten obiekt skonstruować (w tym przypadku nawet wykonać jakieś akcje - otworzyć plik [RAII]), żeby potem można było z tego obiektu korzystać (e.g. czytać z pliku operatorem >>
).
* dla rozjaśnienia - std::ifstream ma konstruktor domyślny, ale dużo nie podziałasz z domyślnie skonstruowanym ifstreamem
Czytanki:)
https://cplusplus.com/
Konstruktory takie na ogół służą do zrealizowania dependency injection, a w połączeniu z brakiem domyślnego konstruktora(czyli takiego bez parametrów) zabezpieczają programistę korzystającego z danego obiektu przez niepoprawnym/bezsensownym użyciem.