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ć”.