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:
-
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. -
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ą. -
Protected: Członkowie
protected
są podobne doprivate
, 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ę |