W języku C++, jaka jest kluczowa różnica między struct a class?
W języku C++, jaka jest kluczowa różnica między struct a class?
struct nie może mieć metod, a class może.struct nie obsługuje dziedziczenia, a class tak.struct jest public, a dla class jest private.struct są tworzone na stosie, a instancje class na stercie.Wyjaśnienie i uzasadnienie dydaktyczne
Poprawna odpowiedź: C
Uzasadnienie i szersze wyjaśnienie:
W nowoczesnym C++ funkcjonalność struct i class jest niemal identyczna. Obie mogą posiadać pola, metody, konstruktory, a także uczestniczyć w dziedziczeniu. Istnieje jednak jedna, fundamentalna różnica, która wynika z historycznych korzeni tych konstrukcji:
- W
class, jeśli nie określimy modyfikatora dostępu, wszystkie składowe (pola i metody) są domyślnieprivate(prywatne). - W
struct, jeśli nie określimy modyfikatora dostępu, wszystkie składowe są domyślniepublic(publiczne).
Jest to jedyna różnica narzucona przez standard języka. Konwencja nakazuje używać struct do prostych agregatów danych (bez skomplikowanej logiki), a class do tworzenia pełnoprawnych obiektów z hermetyzacją, ale z punktu widzenia kompilatora, jest to tylko kwestia domyślnego dostępu.
Dlaczego pozostałe odpowiedzi są nieprawidłowe?
- A.
structnie może mieć metod, aclassmoże: To nieprawda. W C++structmoże mieć metody, konstruktory i destruktory, tak samo jakclass. - B.
structnie obsługuje dziedziczenia, aclasstak: To nieprawda. W C++structmoże dziedziczyć i być klasą bazową. Różnica polega na domyślnym typie dziedziczenia (publicdlastruct,privatedlaclass). - D. Instancje
structsą tworzone na stosie, a instancjeclassna stercie: To nieprawda. Zarówno obiektystruct, jak iclassmogą być tworzone na stosie (np.MojaKlasa obj;) lub na stercie za pomocą operatoranew(np.MojaKlasa* ptr = new MojaKlasa();). Decyzja o miejscu alokacji zależy od programisty, a nie od tego, czy użytostructczyclass.
Chcesz poćwiczyć całą kwalifikację INF.04?
Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.
Pojęcia z tego pytania
- Dziedziczenie (Inheritance w OOP)Mechanizm programowania obiektowego pozwalający klasie pochodnej (podrzędnej) na przejęcie pól i metod z klasy bazowej (nadrzędnej) oraz ich rozszerzenie lub modyfikację.
- Język programowania C++Wieloparadygmatowy, kompilowany bezpośrednio do kodu maszynowego język programowania ogólnego przeznaczenia, oferujący bezpośrednie zarządzanie pamięcią i najwyższą wydajność.
- Konstruktor i DestruktorSpecjalne metody klasy: Konstruktor inicjalizuje stan nowo tworzonego obiektu, a Destruktor zwalnia zasoby przed jego usunięciem.
Podobne pytania z działu „Dziedziczenie i polimorfizm”
Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 20 pytań z tego działu.
- #92
Co można powiedzieć o metodach klasy Point?
- #173
Dziedziczenie jest stosowane, gdy istnieje potrzeba
- #207
W przedstawionym kodzie zostało zaprezentowane jedno z podstawowych założeń programowania obiektowego. Jest to
- #237
Odpowiednikami zmiennych i funkcji programowania strukturalnego są w programowaniu obiektowym
- #285
Mechanizm programowania obiektowego w C++, wykorzystujący funkcje wirtualne (z ang. Virtual), który przy wywołaniu metod zwalnia programistę z obowiązku sprawdzenia jaką klasę pochodną aktualnie obsługuje, np. przez wskaźnik nosi nazwę