Przykładowa klasa w C++ - Pudełko zapałek PDF Drukuj Email
Wpisał doctor   
Niedziela, 13. Grudzień 2009 11:11

Tematem tej lekcji będzie stworzenie przykładowej klasy w C++.Klasa ta będzie nazywać się Pudełko zapałek i będzie przeznaczona do czynności jakie można wykonać z pudełkiem zapałek.

Co to jest klasa w C++?
Klasa w C++ jest nowym typem danych, nierozerwalnie wiąże się z wszelkimi językami programowania zorientowanymi obiektowo.Każdy obiekt należy do jakiejś klasy.Z punktu widzenia typu danych klasę stanowią dane oraz funkcje - metody, które operują na tych danych.Dostęp do danych oraz funkcji składowych klasy może odbywać się z dowolnego miejsca programu (public), lub też tylko wewnątrz klasy (private lub protected).Więcej o klasach przeczytacie w tym serwisie - polecam dobry artykuł Tasmmana (link).

Co można zrobić z pudełkiem zapałek?
Pudełko zapałek jest genialne w swojej prostocie.Służy do jasno określonego celu i zawiera zapałki w ilości 0 lub większej.Aby wyjąć zapałkę z pudełka należy je wpierw otworzyć.W pudełku może być minimum 0 zapałek, a maksimum 49 (tak założyłem).

Dla niecierpliwych
Tak będzie wyglądał program, który będziemy pisać w tej lekcji.Pobrać go można tu.

Jak widzimy, program posiada następujące funkcje:

  • otwarcie pudełka
  • zamknięcie pudełka
  • wyjęcie 1 zapałki
  • włożenie 1 zapałki
  • sprawdzenie ile zapałek jest w pudełku
  • sprawdzenie czy pudełko jest zamknięte

Programujemy!
Najpierw zaczniemy od stworzenia definicji klasy pudelko_zapalek.Definicję tę możemy umieścić w pliku cpp lub nagłówkowym h.

class pudelko_zapalek
{
public:
int ile_zapalek;
 
void dodaj(ile);
void wyjmij(ile);
void otworz();
void zamknij();
bool czy_otwarte();
pudelko_zapalek() {
ile_zapalek=5;
otwarte=false;
}
 
~pudelko_zapalek() {
Beep(1000,100);
}
 
private:
int ile;
bool otwarte;
};

W sekcji z dostępem publicznym znajduje się zmienna ile_zapalek określająca, ile aktualnie zapałek znajduje się w pudełku.Zmienna ta jest wykorzystana w konstruktorze klasy do ustalenia początkowej ilości zapałek w pudełku (5).Metoda czy_otwarte zwraca tak lub nie (bool).W tej klasie dopisany jest destruktor, jednak w tej prostej klasie jest tylko pokazowo.Co robi można się przekonać zamykając program lub usuwając obiekt klasy pudelko_zapalek.

Funkcja czy_otwarte
Oto kod funkcji sprawdzającej, czy pudełko zapałek jest otwarte.

bool pudelko_zapalek::czy_otwarte()
{
if(otwarte)
return true;
else
return false;
}

Jeśli zerkniemy wyżej do definicji klasy, zmienna otwarte jest dostępna wyłącznie wewnątrz klasy i oznacza stan otwarcia pudełka zapałek.Jest tak dlatego, żeby nie można było bezpośrednio ustawić stanu zamknięcia pudełka, a jedynie przez funkcję składową klasy.

Funkcja otworz_pudelko i zamknij_pudelko
Otwieramy pudełko następującym kodem:

void pudelko_zapalek::otworz()
{
otwarte = true;
}

a zamykamy takim kodem:

void pudelko_zapalek::zamknij()
{
otwarte = false;
}

Funkcja dodaj - dodajemy zapałki do pudełka

void pudelko_zapalek::dodaj(int ile)
{
if(otwarte)
{
ile_zapalek+=ile;
if(ile_zapalek>=49)
ile_zapalek=49;
}
else
{
ShowMessage("Musisz najpierw otworzyc pudelko");
}
}

W kodzie tym sprawdzamy najpierw, czy pudełko jest otwarte.Jeśli nie jest, wyświetlany jest odpowiedni komunikat.Jeśli natomiast pudełko jest otwarte, przystępujemy do czynności.Sprawdzamy, czy w pudełku nie jest 49 lub więcej zapałek.Jeśli tak, nie zmieniamy zawartości pudełka.Jeśli w pudełku zapałek jest jeszcze wolne miejsce, zapełniamy je zapałkami.

Funkcja wyjmij - wyjmujemy zapałki z pudełka

void pudelko_zapalek::wyjmij(int ile)
{
if(otwarte)
{
ile_zapalek-=ile;
if(ile_zapalek<=0)
ile_zapalek=0;
}
else
{
ShowMessage("Musisz najpierw otworzyc pudelko");
}
}

Sprawdzamy wpierw, czy pudełko zapałek jest otwarte.Jeśli jest, przystępujemy do wyjmowania zapałek.Wyjmujemy zapałki z pudełka ale maksymalnie do momentu, aż ich ilość będzie wynosić 0 (warunek brzegowy).Jeśli pudełko jest zamknięte, musimy je najpierw sami otworzyć.

Mamy już zdefiniowaną naszą klasę oraz wszystkie metody wchodzące w skład tej klasy.Teraz pora na stworzenie deklaracji tej klasy, która będzie typu naszej klasy.Piszemy więc w programie deklarację klasy (o zasięgu globalnym):

pudelko_zapalek pudelko;

Jest to typ zadeklarowany statycznie.W tym momencie mamy już utworzony obiekt klasy pudelko_zapalek o nazwie pudelko.Analogicznie do tego jak deklarujemy inne zmienne, np. int a ;Na formę (C++ Builder -> New Application) kładziemy odpowiednie komponenty, widoczne na obrazku powyżej.

Pod przyciskiem z etykietą dodaj wklejamy kod:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
pudelko.dodaj(1);
}

Pod przyciskiem z etykietą wyjmij umieszczamy następujący kod:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
pudelko.wyjmij(1);
}

Jeśli chcielibyśmy wyjąć lub dodać z pudełka zapałek ilość zapałek różną od 1, wystarczy zmienić argument funkcji dodaj lub wyjmij.

Przycisk z etykietą ile_zapalek sprawdza nam, ile zapałek jest w pudełku oraz czy pudełko jest otwarte czy zamknięte.

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Label1->Caption = pudelko.ile_zapalek;
bool z = pudelko.czy_otwarte();
if(z)
Label2->Caption = "otwarte";
else
Label2->Caption = "zamkniete";
}

Przycisk z etykietą Otwórz pudełko otwiera pudełko zapałek (jednocześnie sam się dekatywuje).

void __fastcall TForm1::Button4Click(TObject *Sender)
{
pudelko.otworz();
Button4->Enabled = false;
Button5->Enabled = true;
}

Jest to przycisk bistabilny w połączeniu z przyciskiem Zamknij pudełko.Przycisk Zamknij pudełko wykonuje następujący kod:

void __fastcall TForm1::Button5Click(TObject *Sender)
{
pudelko.zamknij();
Button4->Enabled = true;
Button5->Enabled = false;
}

Więcej
W powyższym programie zadeklarowaliśmy statycznie zmienną typu naszej klasy, nie musząc się martwić o zwolnienie jej zasobów.Równie dobrze można utworzyć wskaźnik i przypisać zmienną pudelko_zapalek.Jaka jest różnica? W zmiennej wskaźnikowej dostęp do danych i metod odbywa się przez wskaźnik (->), a w zmiennej statycznej przez referencję (.).

To wszystko! Cały program.Jak widać nic trudnego.Zapraszam do komentowania.

Komentarze
Dodaj nowy Szukaj
+/-
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.
a   |89.72.45.xxx |2009-12-31 00:23:14
po co zmienna int ile; w klasie skoro nie jest używana?
int ile_zapalek;
powinno być raczej private: i tak nie jest używane poza klasą

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Ostatnia aktualizacja: Czwartek, 31. Grudzień 2009 16:42
 
 

Przeczytaj także

Losowy obraz

screen.jpg

Gościmy

Naszą witrynę przegląda teraz 7 gości 




| | | |