stoper

#include <string>

class Czasomierz

{

public:

std::string model;

protected:

void setModel (std::string rhs);

virtual std::string getTrybPracy () = 0;

};

void Czasomierz::setModel (std::string rhs) { this->model = rhs; return; }

class Stoper : Czasomierz /* Błąd projektowy. Brak określonego sposobu dziedziczenia. Zastosowano dziedziczenie domyślne. */

{

private:

int sekundy;

std::string getTrybPracy ();

public:

std::string tryb;

Stoper (std::string rhs) : tryb(rhs) {}

void setTrybPracy (std::string tryb);

void setTrybOn ();

void setTrybOff ();

void addSekunda ();

int getSekundy ();

};

std::string Stoper::getTrybPracy () { return tryb; }

void Stoper::setTrybPracy (std::string tryb) { this->tryb = tryb; return; }

void Stoper::setTrybOn () { this->tryb = "ON"; }

void Stoper::setTrybOff () { this->tryb = "OFF"; }

void Stoper::addSekunda () { ++(this->sekundy); }

int Stoper::getSekundy () { return this->sekundy; }

int main ()

{

Stoper _stoper("jakis_tryb");

_stoper.setTrybPracy("inny_tryb_pracy");

_stoper.setTrybOn();

_stoper.addSekunda(); /* błąd projektowy. Zmienna "sekunda" nie ma wstępnie ustalonej wartości (czyli znajdują się w niej losowe śmieci, które wcześniej były w tym obszarze pamięci), tym samym dodawanie do niej czegokolwiek mija się z celem. Aby to naprawić, należy zmodyfikować konstruktor - np. dodać do jego listy inicjalizacyjnej zapis ", sekundy(0) ". Jest to jedyne rozwiązanie ponieważ pole "sekundy" jest prywatne (a uczynienie go publicznym byłoby jak strzał w pysk enkapsulacji). */

_stoper.getSekundy();

_stoper.setTrybOff();

return 0;

}


Wyszukiwarka

Podobne podstrony:
stoper, Politechnika Koszalińska
vb5.1 stoper timer
vb5.1a stoper timer
STOPER 500 SC

więcej podobnych podstron