Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - C++

C++: Klasy i obiekty

W świecie programowania w C++, termin "klasa" odnosi się do struktury danych, która służy jako szablon do tworzenia instancji zwanych obiektami. Klasy definiują charakterystyczne cechy i zachowania, które będą miały ich instancje. Można to porównać do planu architektonicznego, który określa, jak będzie wyglądał i funkcjonował budynek, ale sam w sobie nie jest budynkiem. W ten sam sposób, klasa określa atrybuty i metody, ale sama w sobie nie reprezentuje danych.

Obiekt to konkretna instancja klasy. Po zdefiniowaniu klasy, programista może tworzyć jej obiekty, które dziedziczą wszystkie cechy zdefiniowane w klasie, ale posiadają własne, unikalne stany.

Przykładem może być klasa "Samochód", która określa atrybuty takie jak marka, model i rocznik, oraz metody takie jak jazda czy zatrzymanie. Obiekt tej klasy może być konkretnym samochodem, na przykład "Ford Mustang 1969".

 

Struktura klasy

Klasa w C++ składa się z dwóch głównych składników: pól (nazywanych również zmiennymi członkowskimi) i metod (funkcji). Pola klasy przechowują dane, które są atrybutami obiektów tej klasy. Na przykład, w klasie Samochód, polami mogą być marka, model i rokProdukcji. Metody, z drugiej strony, definiują działania, które obiekty klasy mogą wykonywać. Dla klasy Samochód mogą to być metody takie jak jedź() czy zatrzymaj().

 

Enkapsulacja | Modyfikatory dostępu

Enkapsulacja odnosi się do praktyki ukrywania wewnętrznych szczegółów klasy przed zewnętrznym światem. Jest to realizowane poprzez stosowanie modyfikatorów dostępu, takich jak private i protected, które ograniczają dostęp do pewnych elementów klasy z zewnątrz. Dzięki enkapsulacji możemy chronić wewnętrzny stan obiektu przed nieautoryzowanym dostępem czy modyfikacją, co zwiększa bezpieczeństwo i modularność kodu. Poprzez definiowanie publicznych interfejsów (metod dostępowych) zapewniamy kontrolowany dostęp do danych, zachowując jednocześnie elastyczność w zmianach wewnętrznej implementacji.

Modyfikatory dostępu w C++ decydują o tym, jak elementy klasy mogą być dostępne z zewnątrz klasy. Istnieją trzy główne modyfikatory dostępu:

  1. Public: Członkowie oznaczeni jako public są dostępne z każdego miejsca programu. Oznacza to, że każdy może zobaczyć i modyfikować te elementy.

  2. Private: Członkowie private są ukryte przed światem zewnętrznym i dostępne tylko w obrębie samej klasy. Jest to część koncepcji enkapsulacji, która chroni dane przed nieautoryzowanym dostępem i modyfikacją.

  3. Protected: Członkowie protected są podobne do private, ale dodatkowo są dostępne w klasach pochodnych.

 

Konstruktory i destruktory

Konstruktory to specjalne metody wywoływane automatycznie podczas tworzenia obiektu klasy. Służą do inicjalizacji stanu obiektu. Na przykład, konstruktor klasy Samochód może ustawiać markę i model samochodu.

Destruktory, z kolei, są wywoływane, gdy obiekt klasy jest niszczony, na przykład gdy wychodzi poza zakres lub jest jawnie usuwany. Służą do sprzątania i zwalniania zasobów, które mogły zostać przydzielone przez obiekt.

 

Dostęp do składowych obiektu

Po stworzeniu obiektu, możemy korzystać z jego pól i metod. Dostęp do nich zależy od modyfikatorów dostępu, które zostały zdefiniowane w klasie. Dla pól publicznych i metod, dostęp jest prosty i bezpośredni, na przykład: mojSamochod.start(); lub cout << mojSamochod.marka;. W przypadku pól prywatnych, zazwyczaj korzysta się z publicznych metod dostępowych (tzw. getterów i setterów) do odczytu i modyfikacji tych pól.

 

Przykład implementacji klasy w C++

#include <iostream>
using namespace std;

class Samochod {
    private:
        string marka;
        string model;
        int rokProdukcji;

    public:
        Samochod(string m, string mod, int rok) : marka(m), model(mod), rokProdukcji(rok) {}

        void jedz() {
            cout << "Samochod " << marka << " " << model << " rusza." << endl;
        }

        void zatrzymaj() {
            cout << "Samochod " << marka << " " << model << " zatrzymuje się." << endl;
        }

        void pokazInformacje() {
            cout << "Marka: " << marka << ", Model: " << model << ", Rok Produkcji: " << rokProdukcji << endl;
        }
};

int main() {
    Samochod mojSamochod("Toyota", "Corolla", 2020);
    mojSamochod.pokazInformacje();
    mojSamochod.jedz();
    mojSamochod.zatrzymaj();
    return 0;
}

 

Analiza kodu

Kod demonstruje podstawowe zasady programowania obiektowego w C++, w tym definicję klasy, tworzenie obiektów, enkapsulację (ukrywanie danych), i interakcję z obiektami poprzez ich metody.

 

class Samochod {
    ...
};

Definicja klasy Samochod.

Klasa Samochod to szablon, który definiuje atrybuty i zachowania samochodu. W C++, definicja klasy zaczyna się od słowa kluczowego class, po którym następuje nazwa klasy.

 

 

private:
    string marka;
    string model;
    int rokProdukcji;

Pola klasy (zmienne członkowskie).

Klasa zawiera trzy prywatne pola: marka, model, i rokProdukcji. Są to atrybuty każdego samochodu. Słowo kluczowe private oznacza, że te zmienne są dostępne tylko wewnątrz klasy Samochod.

 

 

Samochod(string m, string mod, int rok) : marka(m), model(mod), rokProdukcji(rok) {}

Konstruktor.

Konstruktor to specjalna metoda wywoływana podczas tworzenia obiektu klasy. W tym przypadku inicjalizuje ona pola klasy wartościami podanymi jako argumenty. Składnia : marka(m), model(mod), rokProdukcji(rok) to lista inicjalizacyjna, która przypisuje wartości do pól klasy.

 

 

void jedz() { ... }
void zatrzymaj() { ... }
void pokazInformacje() { ... }

Metody.

Metody jedz(), zatrzymaj(), i pokazInformacje() to publiczne metody klasy, które definiują zachowania samochodu. Mogą one być wywoływane na obiektach tej klasy.

 

 

int main() {
    Samochod mojSamochod("Toyota", "Corolla", 2020);
    ...
}

Tworzenie i używanie obiektu.

W funkcji main(), tworzymy instancję klasy Samochod o nazwie mojSamochod, wywołując konstruktor z odpowiednimi argumentami. Następnie wywołujemy metody pokazInformacje(), jedz(), i zatrzymaj() na tym obiekcie.

 

 

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się