Wstęp do programowania obiektowego w C++
Pole
Nikt jednak nie zawracał by sobie głowy takim sposobem pisania oprogramowania gdyby możliwości klas były tak prymitywne jak powyższy przykład. Zapomnieliśmy przecież o tym, że nasz długopis może mieć wysunięty bądź wsunięty wkład. Oczywiste jest to, że jeżeli wkład jest wsunięty to nie możemy nic napisać. Rozbudujmy więc nasz program o kolejną funkcję.
Aby wiedzieć czy wkład jest wysunięty czy nie musimy tą informację gdzieś zapisać. Do tego celu wykorzystamy pole czyli innymi słowy zmienną:
bool czyWysuniety = false;
Klasa Dlugopis
:
class Dlugopis { public: bool czyWysuniety = false; //zakładamy, że wkład jest wsunięty (pesymistyczny przypadek) void pisz(string tekst) { cout << tekst; } };
Jak widać, nowe pole dodałem po słowie kluczowym public
ponieważ ono też musi być publiczne gdyż jego wartość będziemy modyfikować z poziomu funkcji main
(czyli poza klasą). Od razu również przypisałem wartość false
zakładając pesymistyczny przypadek. Należy jednak pamiętać iż wartości w klasie inicjalizujemy za pomocą konstruktora o czym będzie w dalszej części tego artykułu.
Następnym krokiem będzie zmodyfikowanie metody pisz()
, tak aby zablokować możliwość „pisania” w momencie w którym wkład długopisu jest wsunięty. Do tego celu użyjemy zwykłą instrukcję warunkową IF:
void pisz(string tekst) { if(czyWysuniety) cout << tekst; }
Cała klasa:
class Dlugopis { public: bool czyWysuniety = false; void pisz(string tekst) { if(czyWysuniety) cout << tekst; } };
No i pozostało przejść do maina
gdzie ustawiamy po prostu wartości pola czyWysuniety
. Robi to się analogicznie jak odwoływanie do metod:
Ogólny kod:
nazwaObiektu.nazwaPola = wartosc;
W naszym programie:
dlugopis1.czyWysuniety = true; //wysuwamy wkład
Cały kod:
#include <iostream> using namespace std; class Dlugopis { public: bool czyWysuniety = false; void pisz(string tekst) { if(czyWysuniety) cout << tekst; } }; int main() { Dlugopis dlugopis1; dlugopis1.pisz("Napisałeś ten tekst..."); //to nie zostanie napisane dlugopis1.czyWysuniety = true; dlugopis1.pisz("Wkład wysunięty?"); //to już zostanie napisane, bo wkład jest wysunięty return 0; }
Jak widać nasz program powoli zaczyna mieć ręce i nogi. Doskonale widać na tym przykładzie jak prosto w mainie
dzięki klasą można modyfikować różne „stany” na przykład określając w którym momencie funkcja pisz()
ma „pisać”.