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.
konstruktory sparamentryzowane w cpp
- Rejestracja: dni
- Ostatnio: dni
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ę.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 11
@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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5023
Czytanki:)
https://cplusplus.com/
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1454
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.