Temat: 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
publicsą dostępne z każdego miejsca programu. Oznacza to, że każdy może zobaczyć i modyfikować te elementy. -
Private: Członkowie
privatesą 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
protectedsą 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ę |