Programowanie C++ Flashcards

1
Q

Programowanie w C++

Wyjaśnij pojęcie enkapsulacji w programowaniu obiektowym. Wymień i opisz modyfikatory realizujące enkapsulację w języku C++.

A

Enkapsulacja to jedna z fundamentalnych koncepcji programowania obiektowego, polegająca na ukrywaniu wewnętrznych danych i implementacji przed bezpośrednim dostępem z zewnątrz klasy. Enkapsulacja pozwala utrzymać interfejsy w czystości i zminimalizować skutki uboczne interakcji między obiektami.

Modyfikatory dostępu w C++ realizujące enkapsulację:
* public: Członkowie klasy dostępni są dla wszystkich części programu. Dostęp do nich można uzyskać zarówno z wnętrza klasy, jak i z zewnątrz.
* private: Członkowie klasy są niedostępni i niedostrzegalni z zewnątrz klasy; mogą być wykorzystywani jedynie wewnątrz tejże klasy.
* protected: Członkowie klasy są dostępni w obrębie samej klasy oraz w klasach dziedziczących po niej, ale nie są dostępni bezpośrednio z zewnątrz tych klas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
1
Q

Programowanie w C++

Wyjaśnij pojęcia klasy i obiektu w kontekście języka C++.

A

Klasa w C++ jest konstruktem języka służącym do definiowania nowego typu danych. Jest ona “projektem” lub “szablonem”, z którego tworzone są instancje zwane obiektami. Klasa określa zestaw atrybutów (nazywanych polami lub zmiennymi członkowskimi) i metod (funkcji członkowskich), które charakteryzują obiekty tego typu.

Obiekt jest instancją klasy. Gdy klasa jest zdefiniowana, żadna pamięć nie jest jeszcze alokowana dla niej. Pamięć jest alokowana dopiero wtedy, gdy tworzy się obiekty tej klasy. Każdy obiekt ma własne kopie zmiennych członkowskich klasy, podczas gdy metody członkowskie są współdzielone między wszystkimi obiektami danej klasy.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Programowanie w C++

Co to jest obiekt lokalny automatyczny, obiekt lokalny statyczny oraz obiekt globalny w języku C++? Wyjaśnij i porównaj.

A

Obiekt lokalny automatyczny: Jest to obiekt zdefiniowany wewnątrz bloku (np. wewnątrz funkcji), który jest automatycznie tworzony przy wejściu do bloku i niszczony przy wyjściu z bloku. Jego czas życia ogranicza się do czasu trwania bloku, w którym został zdefiniowany.

Obiekt lokalny statyczny: Jest to obiekt zdefiniowany wewnątrz bloku z kluczem static. Jest tworzony raz, przy pierwszym wejściu do bloku i pozostaje “żywy” do końca programu, nawet po wyjściu z bloku, w którym został zdefiniowany.

Obiekt globalny: Jest to obiekt zdefiniowany poza wszystkimi blokami, często na początku pliku źródłowego. Jego czas życia jest równy czasowi życia całego programu, a zakres obejmuje cały plik, a także inne pliki za pośrednictwem extern.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Programowanie w C++

Wyjaśnij pojęcie dziedziczenia i klasy pochodnej w kontekście języka C++.

A

Dziedziczenie to fundamentalna zasada programowania obiektowego, która pozwala na tworzenie nowych klas (klas pochodnych) na podstawie już istniejących (klas bazowych). Dziedziczenie umożliwia klasom pochodnym korzystanie z metod i zmiennych członkowskich klasy bazowej, co pozwala na reużywanie kodu i organizowanie go w logiczne hierarchie.

Klasa pochodna (zwana także subklasą) to klasa, która dziedziczy z innej klasy (klasy bazowej). Klasa pochodna może dodawać własne metody i zmienne, może też nadpisywać (override) metody dziedziczone od klasy bazowej.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Programowanie w C++

Wyjaśnij pojęcie funkcji czysto wirtualnej i klasy abstrakcyjnej w kontekście języka C++.

A

Funkcja czysto wirtualna w C++ to funkcja deklarowana w klasie bazowej, która nie ma żadnej implementacji w tej klasie. Jest ona zaznaczona za pomocą = 0 na końcu jej deklaracji.

Klasa abstrakcyjna to klasa, która ma przynajmniej jedną funkcję czysto wirtualną. Klasy abstrakcyjne służą jako szablony dla klas pochodnych, które muszą dostarczyć własną implementację funkcji czysto wirtualnych.

class Shape {
public:
    virtual void draw() const = 0; // Funkcja czysto wirtualna, wymusza implementację w klasie pochodnej
};

class Circle : public Shape {
public:
    void draw() const override {
        // Rysowanie koła
    }
};

Klasy abstrakcyjne są wykorzystywane do zdefiniowania interfejsów, które klasa pochodna jest zobowiązana zaimplementować, co zapewnia pewien poziom polimorfizmu - zdolność do traktowania obiektów różnych klas pochodnych przez interfejs ich wspólnej klasy bazowej.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly