Egzamin zawodowyPortal części pisemnej

INF.04 · pytanie 99

Definicja konstruktora dla zaprezentowanej klasy w języku C++ może być sformułowana jak poniżej: class Owoc { public: double waga; string nazwa; Owoc(double waga, string nazwa); }; Deklaracja 1: Owoc::Owoc(double waga, string nazwa) { this -> waga = waga; this -> nazwa = nazwa; } Deklaracja 2: Construct::Owoc(double waga, string nazwa) { this -> waga = waga; this -> nazwa = nazwa; } Deklaracja 3: Construct::Owoc(double waga, string nazwa) { this.waga = waga; this.nazwa = nazwa; } Deklaracja 4: Owoc::Owoc(double waga, string nazwa) { this.waga = waga; this.nazwa = nazwa; }

  1. ADeklaracji 1Poprawna
  2. BDeklaracji 2
  3. CDeklaracji 4
  4. DDeklaracji 3

Wyjaśnienie

Deklaracja 1 pokazuje dokładnie taką definicję konstruktora, jaka powinna być użyta w języku C++. Nazwa klasy i konstruktora musi być identyczna, a składnia Owoc::Owoc(double waga, string nazwa) jest kanoniczna w C++ dla implementacji konstruktora poza klasą. Użycie this->waga = waga jasno wskazuje, że chodzi o przypisanie wartości z parametru do pola składowego klasy. W praktyce to jest bardzo często spotykany wzór przy pisaniu konstruktorów dla klasy, która ma kilka pól – tak można odróżnić parametry funkcji od pól klasy. Moim zdaniem warto zawsze zwracać uwagę na taki zapis, bo to pomaga unikać błędów, zwłaszcza przy większych projektach, gdzie pól może być sporo i łatwo się pomylić. W dodatku stosowanie składni this-> od razu sygnalizuje, że działamy na polach konkretnej instancji obiektu. Takie podejście jest zgodne ze wszystkimi standardami C++ i bez problemu skompiluje się w każdym środowisku. W praktyce często spotykam się z tym, że ktoś próbuje stosować inne notacje czy podpatrzone w innych językach konstrukcje, ale w C++ to właśnie taki zapis jest poprawny i klarowny dla każdego programisty. Dla czytelności kodu i łatwości utrzymania projektu, zdecydowanie polecam trzymać się tej formy. Dobrze jest też pamiętać, że w nowszych wersjach C++ można też użyć listy inicjalizacyjnej, ale tutaj przedstawiony sposób jest w pełni poprawny i zrozumiały.