You are on page 1of 6

15 VEŽBE DK

VEŽBANJE. U utorak 26.05. počev od 12h ćemo preko učionice održati računski kolokvijum koji neće
obuhvatiti klase.

Ispod vam dajem nekoliko zadataka za vežbu za ispit.

1. Napisati program u C++ programskom jeziku, gde sa definiše klasa Zaposleni sa podacima id, ime
i adresa. U glavnom programu formirati dva objekta z1 i z2 uneti podatke o zaposlenima sa
konzole i ispisati ih.

#include<iostream>
using namespace std;
class Zaposleni
{
public:
int id;
char ime[20];
char adresa[30];
};
int main()
{
Zaposleni z1;
Zaposleni z2;
//Zaposleni z2 = { 10," Pera ", " Kneza Aleksandra 28" };
cout << "Uneti id broj prvog zaposlenog" << endl;
cin >> z1.id;
cout << "Uneti ime prvog zaposlenog" << endl;
cin >> z1.ime;
cout << "Uneti adresu prvog zaposlenog" << endl;
cin >> z1.adresa;
cout << "Uneti id broj drugog zaposlenog" << endl;
cin >> z2.id;
cout << "Uneti ime drugog zaposlenog" << endl;
cin >> z2.ime;
cout << "Uneti adresu drugog zaposlenog" << endl;
cin >> z2.adresa;
cout << endl << "Podaci o prvom zaposlenom" << endl;
cout << z1.id << " " << z1.ime << " " << z1.adresa << endl << endl;
cout << endl;

cout << "Podaci o drugom zaposlenom" << endl;


cout << z2.id << " " << z2.ime << " " << z2.adresa << endl << endl;
return 0;
}

Pogledajte nekoliko varijacija na temu... isti zadatak, različiti zahtevi u pogledu


atributa, pristupima atributima...

2. Definisati klasu Automobil sa sledećim javnim podacima članovima (atributima, poljima): marka,
godina proizvodnje, cena i registarski broj i funkcijama članicama za unos i ispis podataka o
automobilu. Napisati glavni program u kome se unose podaci o dva automobila i ispisuju podaci
o automobilu koji ima veću cenu.

#include<iostream>
using namespace std;

class Automobil {//svi clanovi klase su podrazumevano privatni ako se ne navede tip
public:
//podaci clanovi
char marka[20];
int godP;
float cena;
char regB[10];
//funkcije clanice
void unos();
/*funkcije clanice se obicno ne definisu u klasi, vec van nje! Funkcije koje se
definisu unutar klase su inline funkcije*/
void ispis() {
cout << "Marka automobila: " << marka << endl;
cout << "Godina proizvodnje: " << godP << endl;
cout << "Cena automobila: " << cena << endl;
cout << "Registarski broj: " << regB << endl;
}
}; //definicija klase obavezno se zavrsava sa ;

//definisanje funkcije clanice izvan klase


void Automobil::unos() {
cout << endl << "Unesi podatke o automobilu:" << endl;
cout << "Marka automobila: ";
cin >> marka;
cout << "Godina proizvodnje: ";
cin >> godP;
cout << "Cena: ";
cin >> cena;
cout << "Registarski broj: ";
cin >> regB;
}

//globalna funkcija
void vecaCena(Automobil a, Automobil b) {
cout << endl << "Automobil koji ima vecu cenu ima sledece podatke:" << endl;
if (a.cena > b.cena) //podaci su obelezeni plavim kvadrom
a.ispis();//metode su obelezene ljubicastim kvadrom
else b.ispis();

}
int main() {
Automobil a, b; //objekti klase Automobil
a.unos();
b.unos();
vecaCena(a, b);
system("pause");
return 0;
}
3. Definisati klasu Automobil, koja sadrži:
Privatne podatke članove (atribute, polja):
 marka (maksimalno 20 znakova);
 godina proizvodnje;
 cena i
 registarski broj (maksimalno 10 znakova);
Javne funkcije članice:
 funkcije za unos i ispis podataka o automobilu i
 funkcije za pristup privatnim podacima članovima, koje su neophodne za ispravno
funkcionisanje programa.
Definisati globalnu funkciju u kojoj se za zadata dva automobila ispisuju podaci o automobilu koji ima
veću cenu. Funkcije članice koje ne menjaju vrednost podataka članova, proglasiti konstantnim. Pristup
članovima klase u funkcijama članicama vršiti preko pokazivača this.

#include<iostream>
using namespace std;

class Automobil {
private:
//podaci clanovi
char marka[20];
int godP;
float cena;
char regB[10];
public:
//funkcije clanice
/*sve funkcije clanice sadrze skriveni, implicitni(ugradjeni) argument -
konstantni pokazivac this na datu klasu; znaci deklaracije funkcija clanica unos i ispis,
implicitno izgledaju ovako:
void unos(const Automobil *this);
void ispis(const Automobil *this);*/

void unos();
/*funkcija ispis ne menja vrednost podataka clanova, pa je treba proglasiti
konstantnom!*/
void ispis() const;
//funkcija pristupa privatnom podatku clanu cena
float dajCenu()const
{
return cena;
}
};

void Automobil::unos() {
cout << endl << "Unesi podatke o automobilu:" << endl;
cout << "Marka automobila: ";
cin >> this->marka;//eksplicitan pristup, preko pokazivaca this
cout << "Godina proizvodnje: ";
cin >> this->godP;
cout << "Cena: ";
cin >> this->cena;
cout << "Registarski broj: ";
cin >> this->regB;
}

void Automobil::ispis() const {


cout << "Marka automobila: " << this->marka << endl;
cout << "Godina proizvodnje: " << this->godP << endl;
cout << "Cena automobila: " << this->cena << endl;
cout << "Registarski broj: " << this->regB << endl;
}

//globalna funkcija
void vecaCena(Automobil a, Automobil b) {
cout << endl << "Automobil koji ima vecu cenu ima sledece podatke:" << endl;
if (a.dajCenu() > b.dajCenu()) //a.cena i b.cena nije dozvoljeno!!!
a.ispis();
else b.ispis();
}

int main() {
Automobil a, b; //objekti klase Automobil
a.unos();//ustvari unos(&a);
b.unos();//ustvari unos(&b);

vecaCena(a, b);
return 0;

**Objašnjenje:

U ovom primeru sve funkcije članice sadrže skriveni, implicitni (ugrađeni) argument – konstantni
pokazivač this na datu klasu, preko koga se vrši pristup do članova klase. Kada neki objekat poziva neku
funkciju članicu, implicitno se pokazivaču this dodeljuje adresa tog objekata, tako da podaci članovi
kojima se pristupa u navedenoj funkciji članici postaju podaci članovi navedenog objekata.

Funkcije članice koje ne menjaju vrednost podataka članova klase treba proglasiti konstantnim,
korišćenjem ključne reči const iza liste funkcijskih argumenata, kao što je to urađeno u primeru u slučaju
funkcije ispis(). Ovakve funkcije se još nazivaju inspektori ili selektori, nasuprot funkcijama koje menjaju
vrednost podataka članova, koje se nazivaju mutatori ili modifikatori, kakva je funkcija upis() u zadatom
primeru.

Kako privatnim podacima članovima mogu pristupati samo funkcije članice zadate klase i prijatelji klase,
da bi globalna funkcija vecaCena() ispravno funkcionisala, potrebno je klasi dodati funkciju članicu
pristupa dajCenu koja omogućuje korišćenje privatnog podatka člana cena.

4. Definisati klasu Automobil, koja sadrži:


Privatne podatke članove (atribute, polja):
 marka (maksimalno 20 znakova);
 godina proizvodnje;
 cena i
 registarski broj (maksimalno 10 znakova);
Javne funkcije članice:
 funkcije za unos i ispis podataka o automobilu;
Definisati globalnu funkciju u kojoj se za zadata dva automobila ispisuju podaci o automobilu koji ima
veću cenu.

Rešenje:

S obzirom da u zadatku nije dozvoljeno korišćenje funkcija za pristup privatnim članovima klase, da bi
globalna funkcija koja ispisuje podatke o automobilu veće cene vecaCena imala pristup do privatnih
članova klase, potrebno ju je proglasiti prijateljskom funkcijom zadate klase. To jest u definiciji klase
Automobil potrebno je u privatnom ili javnom delu klase navesti deklaraciju ove funkcije sa ključnom reči
friend ispred, kao što je to prikazano u sledećem kodu:

#include<iostream>
using namespace std;

class Automobil {
private:
//podaci clanovi
char marka[21];
int godP;
float cena;
char regB[11];
public:
//funkcije clanice
void unos();
void ispis() const;
friend void vecaCena(Automobil a, Automobil b);
};

void Automobil::unos() {
cout << endl << "Unesi podatke o automobilu:" << endl;
cout << "Marka automobila: ";
cin >> marka;
cout << "Godina proizvodnje: ";
cin >> godP;
cout << "Cena: ";
cin >> cena;
cout << "Registarski broj: ";
cin >> regB;
}
void Automobil::ispis() const {
cout << "Marka automobila: " << marka << endl;
cout << "Godina proizvodnje: " << godP << endl;
cout << "Cena automobila: " << cena << endl;
cout << "Registarski broj: " << regB << endl;
}
//globalna funkcija
void vecaCena(Automobil a, Automobil b) {
cout << endl << "Automobil koji ima vecu cenu ima sledece podatke:" << endl;
/*a.cena i b.cena je sada dozvoljeno, jer je funkcija vecaCena prijateljska
funkcija klasi Automobil*/
if (a.cena > b.cena)
a.ispis();
else b.ispis();
}

int main() {
Automobil a, b; //objekti klase Automobil
a.unos();//u stvari unos(&a);
b.unos();//u stvari unos(&b);

vecaCena(a, b);
return 0;
}

Teorijski podsetnik:

Da bi neka fja bila prijateljska, potrebno je ispred njenog imena navesti ključnu reč friend. Prijateljske
funkcije nisu članice klase, već globalne funkcije ili funkcije članice drugih klasa, koje imaju pravo
pristupa privatnim članovima klase. Deklaracija prijateljske fje se mogu navesti u privatnom ili javnom
delu klase.

Za klasu A se kaže da je prijateljska klasa klasi B, ako su sve funkcije članice klase A prijateljske funkcije
klasi B.

You might also like