U primeru je deklarisana klasa Fakultet koja sadrži podatke: adresa, broj zaposlenih, zarada i funkcije članice info() i infoz() tipa void. Promenljivoj zarada se ne može direktno pristupiti iz programa, već samo uz pomoć javne (public) funkcije članice klase. Tako je u primeru pridodata funkcija infoz(), članica klase Fakultet, koja nam daje vrednost zaštićene promenljive.
class Fakultet { public: char adresa[30]; int br_zaposlenih; void info(void); float infoz(void); private: float zarada; };
Da bi se iz programa (iz funkcije main) dodelila vrednost promenljivoj zarada, morala bi se, za tu svrhu, dodati posebna funkcija članica klase. U nastavku je definicija funkcija info() i infoz() klase Fakultet kao i glavni main program.
Zadatak za samostalni rad: Napisati funkciju klase Fakultet koja može da menja vrednost promenljive zarada.
#include <stdio.h> #include <string.h> void Fakultet::info(void) { printf("adresa: %s\n",adresa); printf("broj zaposlenih: %d\n",br_zaposlenih); } float Fakultet::infoz(void) { return zarada; } void main(void) { Fakultet fit; fit.br_zaposlenih=150; strcpy(fit.adresa,"Sestre Janjic br. 6"); fit.info(); // privatnoj promenljivoj ne moze se direktno // pristupiti: fit.zarada=100000.; // javna funkcija klase moze da se upotrebi za to printf("zarada: %f\n",fit.infoz()); }
U nastavku je dat primer konstruktora klase koja služi za manipulacijom nad pravougaonikom kao geometrijskim objektom:
#include <iostream> using namespace std; class Rectangle { int width, height; public: Rectangle (); Rectangle (int,int); int area (void) {return (width*height);} }; Rectangle::Rectangle () { width = 5; height = 5; } Rectangle::Rectangle (int a, int b) { width = a; height = b; }
U primeru možemo primetiti da su kreirana dva konstruktora: podrazumevani konstruktor i konstruktor sa parametrima
U cilju testiranja kreiranih konstruktora napisaćemo sledeći program:
int main () { Rectangle rect (3,4); Rectangle rectb; cout << "povrsina od rect: " << rect.area() << endl; cout << "povrsina od rectb: " << rectb.area() << endl; return 0; }
Konstruktor sa parametrima za ovu klasu može biti definisan, kao i obično, na sledeći način:
Rectangle::Rectangle (int x, int y) { width=x; height=y; }
Ali može biti definisan pomoću liste za inicijalizaciju:
Rectangle::Rectangle (int x, int y) : width(x) { height=y; }
Ili čak i na sledeći način:
Rectangle::Rectangle (int x, int y) : width(x), height(y) { }
Zadatak za samostalni rad: Dodati funkciju koja računa obim pravougaonika, kao i podatke članice koji se odnose na centar pravougaonika u 2D prostoru (centerX, centerY).
Neka je klasa Krug deklarisana na sledeći način:
class Krug { public: int x,y,r; char *boja; Krug(void); // konstruktor ~Krug(void); // destruktor };
Konstruktor klase definišemo kao:
Krug::Krug(void) { printf("konstruktocija kruga\n"); x=10; y=10; r=5; boja=(char *) malloc(10); strcpy(boja,"bela"); }
a destruktor kao:
Krug::~Krug(void) { printf("(destruktor) oslobadjanje memorije\n"); free(boja); }
U cilju testiranja prethodne klase napisaćemo sledeći glavni program:
void main(void) { Krug A; printf("\nKrug\n x=%d\n y=%d\n r=%d\n boja=%s\n\n", A.x, A.y, A.r, A.boja); printf("objekat je unisten\n"); }
Da bi obezbedili neophodnu funkcionalnost programu moramo uključiti u naš projekat sledeće standardne bibliotečne fajlove:
#include <stdio.h> #include <stdlib.h> #include <string.h>
Zadaci za samostalni rad
U listingu koji sledi u nastavku je dat jedan prost primer korišćenja promenljivih klase string.
#include <iostream> #include <string> using namespace std; int main () { string str1 = "Zdravo"; string str2 = "Svete"; string str3; int len ; str3 = str1; cout << "str3 : " << str3 << endl; str3 = str1 + str2; cout << "str1 + str2 : " << str3 << endl; len = str3.size(); cout << "str3.size() : " << len << endl; return 0; }
Kao rezultat programa dobija se:
str3 : Zdravo str1 + str2 : ZdravoSvete str3.size() : 10
Kao što možemo videti, inicijalizacija promenljive str1 i dodeljivanje vrednosti „Hello“ se obavlja na sledeći način:
string str1 = "Zdravo";
Klasa string podržava operator sabiranja+ u cilju spajanja dva stringa. U cilju određivanja dužine stringa moguće je koristiti metodu size().
U sledećem programu je dat primer korišćenja nekih od metoda:
#include <string> #include <iostream> using namespace std; int main() { string str = "C++ je interesantan jezik"; cout << str << endl; cout << str.size() << endl; str = " "; cout << str.size() << endl; string name1; while (name1.empty()) { getline(cin, name1); } cout << name1 << endl; return 0; }
Dve tekstualne promenljive se mogu porediti pomoću metode compare(). Takođe, neka string promenljiva može da se kopira u neku drugu string promenljivu primenom metode assign(). U nastavku je primer poređenja stringova, i kopiranja jednog stringa u drugi:
#include <string> #include <iostream> using namespace std; int main() { string str1, str2, str3, sum = "strings"; cout << "unesi string"; getline(cin, str1); cout << "unesi jos jedan string"; getline(cin, str2); sum += (str1 == str2) ? "identicni" : "razliciti"; if (str1.compare(str2) == 0) { cout << "the same" << endl; } str3.assign(str1); return 0; }