Klasy

2016-06-20 08:43
Jacek Labudda
												Nareszcie dotarliśmy do tej lekcji.
W tym momencie zaczyna się prawdziwe programowanie obiektowe!
Klasy są alternatywą dla struktur.
Jeśli nie miałeś problemu ze zrozumieniem zasady działania struktur, to klasy będą takim rozszerzeniem wiedzy.
Główną różnicą jest dostęp do danych. W strukturach podstawowy dostęp był (public), w klasach podstawowym dostępem jest (private).
Częściej stosować będziemy klasy do opisania obiektów z życia codziennego, np. samochód, drzewo, człowiek, itp.

Tworzenie klas

Deklarowanie klasy oraz tworzenie jej obiektów nie różni się niczym w porównaniu ze strukturą. Lecz jeśli chcemy korzystać z zadeklarowanych wewnątrz pól oraz metod, należy przypisać odpowiedni modyfikator dostępu.
class Samochod{ //elementy prywatne int id_samochodu; public: //elementy publiczne string marka, model; int rocznik; };
Utworzyliśmy klasę Samochod, która jest miejscem przechowującym dane prywatne oraz publiczne. O modyfikatorach dostępu możesz poczytać więcej w lekcji o strukturach .

Nowy obiekt klasy

Utwórzmy nowe obiekty za pomocą konstruktorów. Musimy zatem zmodyfikować nieco naszą klasę.
class Samochod{ public: string marka, model; int rocznik; void wypisz(){ //metoda cout << marka << " " << model << " z rocznika: " << rocznik << ".\n"; } Samochod(string marka, string model, int rocznik){ //konstruktor this->marka = marka; this->model = model; this->rocznik = rocznik; } };
Dodaliśmy konstruktor oraz jedną metodę dla sprawdzenia poprawności działania programu. Kolejnym krokiem jest skorzystanie z uprzednio utworzonego konstruktora.
//nowe obiekty Samochod * nissan = new Samochod("nissan", "egoist", 2012); Samochod * porsche = new Samochod("porsche", "carrera", 2012); Samochod * bmw = new Samochod("bmw", "x8", 2015); nissan ->wypisz(); porsche->wypisz(); bmw ->wypisz();
Wynik: nissan egoist z rocznika: 2012. porsche carrera z rocznika: 2012. bmw x8 z rocznika: 2015.

Dziedziczenie...

Czym w ogóle jest dziedziczenie? Pewnie skojarzyłeś Sobie z jakimś spadkiem po kimś, np. dom po dziadkach, czy skarpetki po starszym bracie :D. Jeśli tak - to świetnie. Dziedziczenie klas polega na przekazaniu dostępu do danych klasy macierzystej do klasy pochodnej. Załóżmy, że mamy klasę Samochod oraz Kola, oczywiście klasa Samochod będzie dziedziczyła dane od klasy Kola. Dzięki temu nie musimy tworzyć jednego wielkiego zbiornika na dane, który przechowuje setki czy tysiące zmiennych oraz metod. Dziedziczenie wygląda następująco:
class Samochod : public/protected/private Kola
Po nazwie klasy pochodnej używamy :(dwukropek), po czym umieszczamy listę klas macierzystych.
#include <iostream> using namespace std; class Kola{ //klasa macierzysta public: int ilosc, rozmiar; }; class Samochod : public Kola{ //klasa pochodna public: string marka, model; int rocznik; void wypisz(){ cout << marka << " " << model << " z rocznika: " << rocznik << ".\n" << "Ilosc kol: " << Kola::ilosc << ", " << Kola::rozmiar << " calowe.\n\n"; } Samochod(string marka, string model, int rocznik, int ilosc_kol, int rozmiar_kol){ this->marka = marka; this->model = model; this->rocznik = rocznik; //pola klasy Kola Kola::ilosc = ilosc_kol; Kola::rozmiar = rozmiar_kol; } }; int main(){ Samochod * nissan = new Samochod("nissan", "egoist", 2012, 4, 24); Samochod * porsche = new Samochod("porsche", "carrera", 2012, 4, 24); Samochod * bmw = new Samochod("bmw", "x8", 2015, 4, 27); nissan->wypisz(); porsche->wypisz(); bmw->wypisz(); return 0; }
nissan egoist z rocznika: 2012. Ilosc kol: 4, 24 calowe. porsche carrera z rocznika: 2012. Ilosc kol: 4, 24 calowe. bmw x8 z rocznika: 2015. Ilosc kol: 4, 27 calowe. Powyżej odwołuję się do elementów klasy Kola za pomocą jej nazwy oraz podwójnego dwukropka(Kola::). Użyłem takiego sposobu tylko dlatego, aby pokazać, że w taki sposób też można się odwołać. Stosuje się to wtedy, gdy w klasie pochodnej lub innej klasie macierzystej z której dziedziczymy znajduje się zmienna o takiej samej nazwie, aby kompilator wiedział do której zmiennej się odwołać. Dziedziczenie struktur jest możliwe lecz rzadko stosowane w praktyce.

Zadanie:

Korzystając z powyższego przykładu: I. Stwórz klasę osoby która przechowuje informację o jej imieniu i nazwisku, klasę która przechowuje informację o wieku osoby(zmienna o nazwie wiek) oraz klasę która przechowuje informację o tym, w którym wieku urodziła się dana osoba(zmienna o nazwie wiek); II. Zastosuj dziedziczenie; III. Następnie za pomocą konstruktora zdefiniuj dane wszystkich klas; IV. Na koniec wypisz wszystkie dane; Powodzenia.

Użytkownicy
Logowanie:
Zaloguj
Polub nas na facebooku
Wyszukiwanie na stronie