konstruktory sparamentryzowane w cpp

0

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.

0

@Samhain: Co rozumiesz przez sparametryzowany? Konstruktor przyjmujący argumenty?

0
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ę.

0

@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

0

Czytanki:)
https://cplusplus.com/

1

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1