пример 2: енкапсулација

У овом примеру, који је проширење претходног, демонстрираћемо концепт енкапсулације. Енкапсулацијом (учаурењем, затварањем) се постиже да не буду сви чланови класе доступни за директан приступ, него да корисник (програмер који користи класу) мора да користи одговарајуће методе. Тиме се постиже да класа има контролу над вредностима које ће бити уписане у њене чланове податке.

Обратите пажњу на имплементацију метода set_GR и set_Godina.

Питање за наставника ...

модул ucenik

ucenik.h

class TUcenik
{
private:
char Ime[100];
int GR; //godina rodjenja
int Godina; // koju godinu slusa
char Odeljenje[20];
public:
void set_Ime(const char* const);
void set_GR(const int);
void set_Godina(const int);
void set_Odeljenje(const char* const);
void PredstaviSe(); // metoda, funkcija koja pripada klasi
};

ucenik.cpp

#include <iostream>
#include <string.h>
#include <DOS.H>
#include "ucenik.h"

void TUcenik::set_Ime(const char* const theIme)
{
strcpy(Ime, theIme);
}

void TUcenik::set_GR(const int theGR)
{
date d; // date je struktura deklarisana u DOS.H, pogledajte help
getdate(&d);   // uzimanje sistemskog datuma, pogledajte help

if (((d.da_year-theGR)>=15) &&  ((d.da_year-theGR)<=20))
GR=theGR;
else
cout<<"Greska prilikom unosa Godine rodjenja. Ucenici moraju da imaju najmanje 15 godina, a najvise 20"<<endl;
}

void TUcenik::set_Godina(const int theGodina)
{
if (theGodina>=1 && theGodina<=4)
Godina=theGodina;
else
cout<<"Greska prilikom unosa Godine. Isparavna vrednost je od 1 do 4" <<endl;
}

void TUcenik::set_Odeljenje(const char* const theOdeljenje)
{
strcpy(Odeljenje, theOdeljenje);
}

void TUcenik::PredstaviSe()
{
cout<<"Ja sam "<<Ime
<<" rodjen "<<GR
<<". godine, trenutno sam "
<<Godina<<". godina, odeljenje "
<<Odeljenje<<endl;
}

main функција

#include <conio>
#include <iostream>
#include "ucenik.h"

main()
{
TUcenik u;
u.set_Ime("Petar Petrovic");
u.set_GR(1955); // namerno pogresno, starija osoba
u.set_GR(2003); // namerno pogresno, mladja osoba
u.set_GR(1993); // ispravno
u.set_Godina(10); // namerno pogresno
u.set_Godina(4);  // ispravno
u.set_Odeljenje("IV-2");
u.PredstaviSe();

getch();
}