Klasy: Tworzenie obiektów i metod

Kurs: Wstęp do programowania
Lekcja 6: Zaawansowane techniki programistyczne
Temat 3: Klasy: Tworzenie obiektów i metod

⇓ spis treści ⇓


Programowanie obiektowe (OOP) jest jednym z najważniejszych paradygmatów w języku C++, a podstawowym jego elementem są klasy. Klasy umożliwiają tworzenie struktur danych, które łączą dane (pola) i funkcje (metody) w jedną całość, znacznie upraszczając projektowanie złożonych aplikacji. W tej lekcji dowiesz się, jak tworzyć klasy w C++, jak definiować obiekty oraz jak implementować metody, które operują na tych danych. Zrozumienie, jak działają klasy i obiekty, to klucz do efektywnego programowania zorientowanego obiektowo.

Co to jest klasa?

Klasa to szablon lub schemat, który opisuje, jak tworzyć obiekty. Zawiera definicje pól (zmiennych członkowskich) i metod (funkcji członkowskich), które operują na tych polach. Klasa może być postrzegana jako niebieski druk dla obiektów, które są instancjami tej klasy.

Podstawowa składnia klasy
class NazwaKlasy {
public:
    // Deklaracje zmiennych członkowskich (pól)
    int zmiennaCzlonkowska;

    // Deklaracje metod (funkcji członkowskich)
    void metodaCzlonkowska() {
        // Implementacja metody
        std::cout << "To jest metoda członkowska!" << std::endl;
    }
};

W powyższym przykładzie NazwaKlasy jest definicją klasy, która zawiera jedną zmienną członkowską zmiennaCzlonkowska oraz jedną metodę członkowską metodaCzlonkowska(). Słowo kluczowe public oznacza, że te elementy są dostępne z zewnątrz klasy.

Tworzenie obiektów

Po zdefiniowaniu klasy możemy tworzyć obiekty, które są instancjami tej klasy. Obiekty to konkretne egzemplarze klasy, które mogą mieć różne wartości pól, ale dzielą te same metody.

Przykład tworzenia obiektów
int main() {
    NazwaKlasy obiekt; // Tworzenie obiektu klasy NazwaKlasy
    obiekt.zmiennaCzlonkowska = 10; // Ustawianie wartości pola
    obiekt.metodaCzlonkowska(); // Wywoływanie metody członkowskiej
    return 0;
}

W tym przykładzie tworzymy obiekt obiekt klasy NazwaKlasy, ustawiamy wartość jego pola zmiennaCzlonkowska na 10 i wywołujemy metodę metodaCzlonkowska(). Obiekty umożliwiają przechowywanie danych i operowanie na nich za pomocą metod.

Modyfikatory dostępu

W C++ istnieją trzy główne modyfikatory dostępu, które określają, jak dane i metody klasy mogą być używane:

  • public: Członkowie publiczni są dostępni z każdego miejsca w kodzie.
  • private: Członkowie prywatni są dostępni tylko w obrębie klasy i nie mogą być używane bezpośrednio spoza niej.
  • protected: Członkowie chronieni są dostępni tylko w obrębie klasy i jej klas pochodnych (dziedziczących).
Przykład użycia modyfikatorów dostępu
class KontoBankowe {
private:
    double saldo; // Prywatne pole: dostępne tylko w obrębie klasy

public:
    void wplac(double kwota) {
        saldo += kwota;
    }

    double sprawdzSaldo() {
        return saldo;
    }
};

W tym przykładzie pole saldo jest prywatne, co oznacza, że nie można go zmodyfikować bezpośrednio z zewnątrz klasy. Metody wplac() i sprawdzSaldo() są publiczne, więc można je wywoływać na obiektach klasy KontoBankowe.

Metody w klasach

Metody to funkcje zdefiniowane wewnątrz klasy, które operują na danych tej klasy. Mogą być deklarowane i definiowane wewnątrz klasy lub deklarowane w klasie i definiowane na zewnątrz.

Definiowanie metod wewnątrz klasy
class Prostokat {
public:
    int szerokosc, wysokosc;

    int obliczPole() {
        return szerokosc * wysokosc;
    }
};
Definiowanie metod na zewnątrz klasy
class Kolo {
public:
    double promien;
    double obliczObwod();
};

double Kolo::obliczObwod() {
    return 2 * 3.14159 * promien;
}

W powyższym przykładzie metoda obliczObwod() jest deklarowana w klasie Kolo i definiowana na zewnątrz, co może poprawić czytelność kodu, zwłaszcza w przypadku większych projektów.

Konstruktory i destruktory

Konstruktory to specjalne metody, które są wywoływane automatycznie podczas tworzenia obiektu. Używane są do inicjalizacji pól obiektu. Destruktory to metody, które są wywoływane automatycznie podczas niszczenia obiektu, służące do zwalniania zasobów, takich jak pamięć czy połączenia sieciowe.

Przykład konstruktora i destruktora
class Samochod {
public:
    std::string marka;

    // Konstruktor
    Samochod(std::string m) : marka(m) {
        std::cout << "Samochód " << marka << " utworzony." << std::endl;
    }

    // Destruktor
    ~Samochod() {
        std::cout << "Samochód " << marka << " zniszczony." << std::endl;
    }
};

int main() {
    Samochod auto1("Toyota");
    return 0;
}

W tym przykładzie konstruktor Samochod(std::string m) jest używany do inicjalizacji pola marka, a destruktor ~Samochod() jest wywoływany, gdy obiekt auto1 jest niszczony.

Przeciążanie metod

W C++ można przeciążać metody, co oznacza, że można tworzyć wiele metod o tej samej nazwie, ale różnych listach argumentów. Kompilator wybiera odpowiednią wersję metody na podstawie podanych argumentów.

Przykład przeciążania metod
class Kalkulator {
public:
    int dodaj(int a, int b) {
        return a + b;
    }

    double dodaj(double a, double b) {
        return a + b;
    }
};

int main() {
    Kalkulator calc;
    std::cout << "Dodaj liczby całkowite: " << calc.dodaj(5, 10) << std::endl;
    std::cout << "Dodaj liczby zmiennoprzecinkowe: " << calc.dodaj(5.5, 10.1) << std::endl;
    return 0;
}

W tym przykładzie metoda dodaj() jest przeciążona, aby obsługiwać zarówno liczby całkowite, jak i zmiennoprzecinkowe.

Metody statyczne

Metody statyczne to metody, które nie operują na instancjach klasy, ale na samej klasie. Oznacza to, że można je wywoływać bez tworzenia obiektu. Używane są do operacji, które nie wymagają dostępu do pól obiektu.

Przykład metody statycznej
class Matematyka {
public:
    static int dodaj(int a, int b) {
        return a + b;
    }
};

int main() {
    std::cout << "Suma: " << Matematyka::dodaj(3, 7) << std::endl;
    return 0;
}

W tym przykładzie metoda dodaj() jest statyczna i może być wywoływana bez tworzenia obiektu klasy Matematyka.

Podsumowanie

Klasy są fundamentem programowania obiektowego w C++, umożliwiając tworzenie złożonych struktur danych i metod, które na nich operują. Dzięki tej lekcji zdobyłeś wiedzę na temat tworzenia klas, definiowania obiektów, używania metod oraz innych zaawansowanych koncepcji, takich jak konstruktory, destruktory i przeciążanie metod. Zrozumienie, jak działają klasy i obiekty, pozwoli Ci tworzyć bardziej modularne i skalowalne aplikacje, które są łatwiejsze do zarządzania i rozwijania.

Następny temat ==> Wywoływanie metod na obiektach



Spis Treści - Wstęp do programowania

Lekcja 3: Rozwiązywanie problemów i poprawność programów Lekcja 4: Praca z różnymi typami danych Lekcja 5: Obsługa plików i pamięci Lekcja 6: Zaawansowane techniki programistyczne Lekcja 7: Wskaźniki i pamięć dynamiczna Lekcja 8: Struktura kodu i abstrakcja Lekcja 9: Rekurencja i jej zastosowania Lekcja 10: Analiza wydajności algorytmów Lekcja 11: Technika "dziel i zwyciężaj" Lekcja 12: Struktury danych o dynamicznej budowie Lekcja 13: Struktury hierarchiczne: Drzewa Lekcja 14: Struktury danych z bibliotek Lekcja 15: Algorytmy z nawrotami Lekcja 16: Programowanie dynamiczne Lekcja 17: Programowanie zachłanne Lekcja 18: Praca z grafami

Jeśli chciałbyś być poinformowany o następnych kursach to zapisz się do naszego newslettera: