KWALIFIKACJA INF2 + INF3 - CZERWIEC 2011

PYTANIE NR 6.
Przedstawiona instrukcja języka C++ to instrukcja tworzenia
Ilustracja przedstawia fragment kodu w języku C++, który jest częścią pytania egzaminacyjnego z kwalifikacji zawodowej dla
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawna odpowiedź dotyczy dziedziczenia w C++. Zapis deklaracji klasy z listą dwóch klas bazowych (oddzielonych przecinkiem) oznacza utworzenie klasy pochodnej dziedziczącej po dwóch bazach (wielodziedziczenie). Pozostałe opcje mylą dziedziczenie z "współpracą" klas lub z tworzeniem obiektów i składowych.

Pełne wyjaśnienie:

W C++ deklaracja klasy pochodnej zawiera po nazwie klasy znak dwukropka oraz listę klas bazowych wraz ze specyfikatorami dostępu, np. class D : public A, public B. Taki zapis oznacza, że tworzona jest klasa pochodna (D), która dziedziczy po dwóch klasach bazowych (A i B). Jest to klasyczny przykład wielodziedziczenia.

Odpowiedź "klasy pochodnej na podstawie dwóch klas bazowych." jest więc poprawna, bo opisuje dokładnie sens składni: jedna nowa klasa przejmuje (zgodnie z regułami C++) składowe i zachowania klas bazowych oraz może je rozszerzać lub przesłaniać.

Dlaczego pozostałe propozycje są błędne:

  • "klasy współpracującej z dwoma innymi klasami." – współpraca/asocjacja/kompozycja w OOP nie jest wyrażana dwukropkiem i listą baz w deklaracji klasy. Tego typu relacje wynikają zwykle z pól składowych (np. obiekt jako członek) albo parametrów/metod, a nie z listy dziedziczenia.
  • "obiektu z dwiema składowymi publicznymi." – obiekt to instancja klasy tworzona np. przez wywołanie konstruktora lub deklarację zmiennej danego typu. Zapis dziedziczenia dotyczy definicji typu (klasy), a nie tworzenia instancji, ani nie przesądza o liczbie składowych.
  • "dwóch publicznych obiektów." – w C++ specyfikator "public" w kontekście dwukropka po nazwie klasy odnosi się do trybu dziedziczenia, a nie do "publiczności" obiektów. Ponadto sam zapis dziedziczenia nie tworzy dwóch obiektów.

Wskazówka egzaminacyjna: gdy widzisz po nazwie klasy dwukropek i listę nazw typów, myśl "dziedziczenie", a gdy widzisz pola składowe lub tworzenie zmiennych – dopiero wtedy rozważasz kompozycję albo instancje (obiekty).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Klasa bazowa to klasa, po której dziedziczy inna klasa (pochodna). Udostępnia ona część wspólną: pola, metody i interfejs, które mogą być ponownie użyte i rozszerzone w klasie pochodnej. To podstawa budowania hierarchii typów w programowaniu obiektowym.
Klasa pochodna to klasa utworzona na podstawie jednej lub wielu klas bazowych. Może przejmować ich składowe (zgodnie z zasadami dostępu) oraz dodawać własne elementy. Najczęściej służy do specjalizacji zachowania: "D jest szczególnym przypadkiem A".
Szukaj deklaracji z dwukropkiem po nazwie klasy oraz dwóch nazw klas bazowych rozdzielonych przecinkiem. Taki zapis informuje o wielodziedziczeniu (dziedziczenie z dwóch baz). Same przecinki w nawiasach funkcji oznaczają co innego, więc ważny jest kontekst deklaracji klasy.
Dwukropek w deklaracji klasy wprowadza listę klas bazowych i sposób dziedziczenia (np. public/protected/private). To sygnał, że tworzony typ ma relację dziedziczenia z innymi typami. Bez dwukropka deklarujesz klasę bez jawnie wskazanych baz.
Dziedziczenie publiczne oznacza, że publiczne elementy klasy bazowej pozostają publiczne w klasie pochodnej (a chronione pozostają chronione). Jest to typowe dla relacji "is-a", gdy obiekt klasy pochodnej ma być używany tam, gdzie oczekuje się obiektu klasy bazowej.
Nie zawsze. Wielodziedziczenie bywa przydatne, ale może komplikować projekt (np. konflikt nazw, problem "diamentu"). Często alternatywą jest kompozycja albo dziedziczenie po klasach abstrakcyjnych pełniących rolę interfejsów. Na egzaminie ważne jest rozpoznanie składni i konsekwencji.
Dziedziczenie opisuje relację typu "jest rodzajem" (klasa pochodna rozszerza bazową). Kompozycja opisuje relację "ma" (klasa zawiera obiekty innych klas jako pola). W kodzie dziedziczenie rozpoznasz po dwukropku w deklaracji klasy, a kompozycję po polach składowych odpowiednich typów.
Nie. Deklaracja/definicja klasy tworzy nowy typ, a nie instancję. Obiekt powstaje dopiero wtedy, gdy zadeklarujesz zmienną danego typu lub użyjesz operatora tworzenia (np. alokacji dynamicznej). Dlatego odpowiedzi mówiące o "tworzeniu obiektu" nie pasują do składni dziedziczenia.
Typowe pomyłki to: mylenie klasy z obiektem, traktowanie listy klas bazowych jako "lista składowych", oraz utożsamianie dziedziczenia ze współpracą klas. Warto ćwiczyć czytanie deklaracji klasy i nazywanie elementów: nazwa klasy, lista baz, tryb dziedziczenia.
Przećwicz rozpoznawanie konstrukcji: definicja klasy, dziedziczenie, przesłanianie metod, wirtualność, oraz różnice między kompozycją i dziedziczeniem. Dobrą metodą jest przepisywanie krótkich fragmentów kodu i opisywanie ich własnymi słowami: "co tu powstaje i z czego wynika".
info

Statystycznie 61% uczniów zna prawidłową odpowiedź. średnie

W praktyce zawodowej kluczowe jest to, że poprawna odpowiedź dotyczy dziedziczenia w C++.

Źródła:

  • cppreference.com: "Derived classes" (C++ inheritance) — https://en.cppreference.com/w/cpp/language/derived_class — dostęp 2026-03-02
  • cppreference.com: "Class declaration" — https://en.cppreference.com/w/cpp/language/class — dostęp 2026-03-02

Materiały:

  • Dokumentacja referencyjna C++ (cppreference) dotycząca dziedziczenia
  • Rozdziały z podręcznika C++ o programowaniu obiektowym: klasy, dziedziczenie, polimorfizm
  • Ćwiczenia praktyczne: tworzenie klas bazowych i pochodnych oraz analiza zależności w kodzie

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego