C++ Klasa i objekt s primjerom
โก Pametni saลพetak
Klase i objekti u C++ ฤine temelj objektno orijentiranog programiranja, gdje klasa definira nacrt podataka i funkcija ฤlanica, a objekt je konkretna instanca stvorena iz tog nacrta.

ล to je klasa?
A C++ klasa kombinira podatke i metode za manipuliranje podacima u jednu. Klase takoฤer odreฤuju oblike objekata. Podaci i metode sadrลพani u klasi poznati su kao ฤlanovi klase. Klasa je tip podataka koji definira korisnik. Za pristup ฤlanovima klase koristimo instancu klase. Moลพete vidjeti klasu kao nacrt za objekt.
Klasa moลพe biti prototip kuฤe. Prikazuje poloลพaj i veliฤine vrata, prozora, podova itd. Iz tih opisa moลพemo konstruirati kuฤu. Kuฤa postaje objekt. Moguฤe je stvoriti mnogo kuฤa iz prototipa. Takoฤer, moguฤe je stvoriti mnogo objekata iz klase.
Na gornjoj slici imamo prototip jedne kuฤe. Od ovog prototipa stvorili smo dvije kuฤe s razliฤitim znaฤajkama.
Imajuฤi na umu ideju klase kao nacrta, sljedeฤi korak je vidjeti kako se ona deklarira u kodu.
Klasna deklaracija
In C++, klasa se definira pomoฤu kljuฤne rijeฤi class. Nakon toga treba slijediti naziv klase. Tijelo klase se zatim dodaje izmeฤu vitiฤastih zagrada { }.
Sintaksa
class class-name { // data // functions };
- The naziv-klase je ime koje treba dodijeliti klasi.
- The datum su podaci za klasu, obiฤno deklarirani kao varijable.
- The Funkcije su funkcije klase.
Deklarisanje imena i tijela klase prirodno postavlja pitanje tko smije koristiti svaki ฤlan.
Privatne i javne kljuฤne rijeฤi
Sigurno ste naiลกli na ove dvije kljuฤne rijeฤi. Oni su modifikatori pristupa.
Smjeลกtaj kod:
Kada se kljuฤna rijeฤ private koristi za definiranje funkcije ili klase, ona postaje privatna. Takvi su dostupni samo iz klase.
Javnost:
Kljuฤna rijeฤ public, s druge strane, ฤini podatke/funkcije javnima. Njima se moลพe pristupiti izvan razreda.
Nakon ลกto klasa postoji, objekti se mogu kreirati iz nje, sliฤno kao ลกto se varijable kreiraju iz tipa podataka.
Definicija objekta
Objekti se stvaraju iz klasa. Objekti klase se deklariraju na sliฤan naฤin kao ลกto se deklariraju varijable. Ime klase mora biti prvo, a zatim ime objekta. Objekt je tipa klase.
Sintaksa
class-name object-name;
- The naziv-klase je naziv klase iz koje se ลพeli stvoriti objekt.
- The naziv-objekta je ime koje ฤe se dodijeliti novom objektu.
Ovaj proces stvaranja objekta iz klase poznat je kao instanciranje.
Nakon ลกto je objekt kreiran, njegovim javnim ฤlanovima moลพe se pristupiti izravno putem jednostavnog operatora.
Pristup ฤlanovima podataka
Za pristup javnim ฤlanovima klase koristimo operator (.)dot. Ovo su ฤlanovi oznaฤeni modifikatorom javnog pristupa.
Primjer 1
#include <iostream> using namespace std; class Phone { public: double cost; int slots; }; int main() { Phone Y6; Phone Y7; Y6.cost = 100.0; Y6.slots = 2; Y7.cost = 200.0; Y7.slots = 2; cout << "Cost of Huawei Y6 : " << Y6.cost << endl; cout << "Cost of Huawei Y7 : " << Y7.cost << endl; cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl; cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl; return 0; }
Izlaz:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite iostream datoteku zaglavlja u naลก kod kako biste koristili njezine funkcije.
- Ukljuฤivanje std imenskog prostora u naลก kod za koriลกtenje njegovih klasa bez pozivanja.
- Deklarirajte klasu pod nazivom Phone.
- Koriลกtenje modifikatora javnog pristupa za oznaฤavanje varijabli koje ฤemo izraditi kao javno dostupnih.
- Deklarirajte varijabilni troลกak dvostrukog tipa podataka.
- Deklarirajte cjelobrojnu varijablu pod nazivom slots.
- Kraj tijela razreda.
- Pozivanje glavne () funkcije. Programsku logiku treba dodati unutar njegovog tijela.
- Kreirajte objekt pod nazivom Y6 tipa Phone. To se zove instanciranje.
- Kreirajte objekt pod nazivom Y7 tipa Phone. To se zove instanciranje.
- Pristup varijabli/ฤlanskom troลกku klase Phone pomoฤu objekta Y6. Vrijednost je postavljena na 100.0. Cijena Y6 sada je postavljena na 100.0.
- Pristupite utorima za varijable/ฤlanove klase Phone pomoฤu objekta Y6. Vrijednost je postavljena na 2. Utori za Y6 sada su postavljeni na 2.
- Pristup varijabli/ฤlanskom troลกku klase Phone pomoฤu objekta Y7. Vrijednost je postavljena na 200.0. Cijena Y7 sada je postavljena na 200.0.
- Pristupite utorima za varijable/ฤlanove klase Phone pomoฤu objekta Y7. Vrijednost je postavljena na 2. Utori za Y7 sada su postavljeni na 2.
- Ispiลกite cijenu Y6 na konzoli uz ostali tekst.
- Ispiลกite cijenu Y7 na konzoli uz ostali tekst.
- Ispiลกite broj utora za Y6 uz ostali tekst.
- Ispiลกite broj utora za Y7 uz ostali tekst.
- Program mora vratiti vrijednost nakon uspjeลกnog zavrลกetka.
- Kraj tijela funkcije main().
Javni ฤlanovi su otvoreni za vanjski kod, ali privatni ฤlanovi slijede mnogo stroลพa pravila pristupa.
ล to je privatni teฤaj?
ฤlanovima klase oznaฤenim kao privatnima moลพe se pristupiti samo pomoฤu funkcija definiranih unutar klase. Bilo koji objekt ili funkcija definirana izvan klase ne moลพe izravno pristupiti takvim ฤlanovima. ฤlanu privatne klase pristupaju samo funkcije ฤlana i prijatelja.
Primjer 2
#include <iostream> using namespace std; class ClassA { public: void set_a(int val); int get_a(void); private: int a; }; int ClassA::get_a(void) { return a; } void ClassA::set_a(int val) { a = val; } int main() { ClassA a; a.set_a(20); cout << "Value of a is: " << a.get_a(); return 0; }
Izlaz:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
- Napravite klasu pod nazivom ClassA.
- Koristite modifikator javnog pristupa da oznaฤite ฤlana klase koji ฤe se stvoriti kao javno dostupan.
- Napravite funkciju pod nazivom set_a() koja uzima jednu cjelobrojnu vrijednost val.
- Napravite funkciju pod nazivom get_a().
- Upotrijebite modifikator privatnog pristupa da oznaฤite ฤlana klase koji ฤe se stvoriti kao privatno pristupaฤan.
- Deklarirajte cjelobrojnu varijablu pod imenom a.
- Kraj tijela razreda.
- Za pristup funkciji get_a() upotrijebite naziv klase i operator rezolucije opsega. ลฝelimo definirati ลกto funkcija radi kada se pozove.
- Funkcija get_a() trebala bi vratiti vrijednost varijable a kada se pozove.
- Kraj definicije funkcije get_a().
- Za pristup funkciji set_a() upotrijebite naziv klase i operator rezolucije opsega. ลฝelimo definirati ลกto funkcija radi kada se pozove.
- Dodjeljivanje vrijednosti varijable val varijabli a.
- Kraj definicije funkcije set_a().
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
- Napravite instancu ClassA i dajte joj ime a.
- Koristite gornju instancu klase i funkciju set_a() da dodijelite vrijednost 20 varijabli a.
- Ispis nekog teksta uz vrijednost varijable a na konzoli. Vrijednost varijable a dobiva se pozivom funkcije get_a().
- Program mora vratiti vrijednost nakon uspjeลกnog zavrลกetka.
- Kraj tijela funkcije main().
Zaลกtiฤeni ฤlanovi nalaze se izmeฤu privatnih i javnih, dodajuฤi jednu kljuฤnu moguฤnost nasljeฤivanja.
ล to je zaลกtiฤena klasa?
ฤlanovi klase oznaฤeni kao zaลกtiฤeni imaju prednost u odnosu na one koji su oznaฤeni kao privatni. Njima se moลพe pristupiti funkcijama unutar klase njihove definicije. Osim toga, moลพe im se pristupiti iz izvedenih klasa.
Primjer 3
#include <iostream> using namespace std; class ParentClass { protected: int value; }; class ChildClass : public ParentClass { public: void setId(int x) { value = x; } void displayValue() { cout << "Value is: " << value << endl; } }; int main() { ChildClass c; c.setId(21); c.displayValue(); return 0; }
Izlaz:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
- Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
- Napravite klasu pod nazivom ParentClass.
- Koristite modifikator zaลกtiฤenog pristupa da oznaฤite ฤlana klase koji ฤe se stvoriti kao zaลกtiฤen.
- Napravite cjelobrojnu varijablu pod nazivom vrijednost.
- Kraj tijela razreda.
- Napravite novu klasu pod nazivom ChildClass koja nasljeฤuje ParentClass.
- Upotrijebite modifikator zaลกtiฤenog pristupa da oznaฤite ฤlana klase koji ฤe se stvoriti kao pristupaฤan klasama podreฤenim.
- Napravite funkciju pod nazivom setId() koja uzima jednu cjelobrojnu vrijednost x.
- Pridjeljivanje vrijednosti varijable x vrijednosti varijable.
- Kraj definicije funkcije setId().
- Napravite funkciju pod nazivom displayValue().
- Ispiลกite vrijednost varijable pod nazivom vrijednost na konzoli uz ostali tekst.
- Kraj tijela funkcije displayValue().
- Kraj tijela klase pod nazivom ChildClass.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
- Napravite instancu ChildClass i dajte joj ime c.
- Koristite gornju instancu klase i funkciju setId() da dodijelite vrijednost 21 varijabli x.
- Koristite gornju instancu klase za poziv funkcije pod nazivom displayValue().
- Program mora vratiti vrijednost nakon uspjeลกnog zavrลกetka.
- Kraj tijela funkcije main().
Osim pohranjivanja podataka, klasa takoฤer grupira funkcije koje rade s tim podacima.
Funkcije ฤlanova klase
Funkcije nam pomaลพu manipulirati podacima. Funkcije ฤlanova klase mogu se definirati na dva naฤina:
- Unutar definicije klase
- Izvan definicije klase
Ako funkcija treba biti definirana izvan definicije klase, moramo koristiti operator razluฤivanja opsega (::). Ovo treba biti popraฤeno nazivima klasa i funkcija.
Primjer 4
#include <iostream> #include <string> using namespace std; class Guru99 { public: string tutorial_name; int id; void printname(); void printid() { cout << "Tutorial id is: "<< id; } }; void Guru99::printname() { cout << "Tutorial name is: " << tutorial_name; } int main() { Guru99 guru99; guru99.tutorial_name = "C++"; guru99.id = 1001; guru99.printname(); cout << endl; guru99.printid(); return 0; }
Izlaz:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite datoteku zaglavlja iostream u naลก program da biste koristili njegove funkcije.
- Ukljuฤite datoteku zaglavlja niza u naลก program da biste koristili njegove funkcije.
- Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
- Stvorite klasu pod nazivom Guru99.
- Upotrijebite modifikator javnog pristupa kako biste oznaฤili ฤlanove klase koje ฤemo stvoriti kao javno dostupne.
- Stvorite string varijablu pod nazivom tutorial_name.
- Napravite cjelobrojnu varijablu imena id.
- Napravite funkciju pod nazivom printname(). Ova funkcija nije definirana unutar definicije klase.
- Kreirajte funkciju pod nazivom printid(). Ova funkcija je definirana unutar definicije klase. Njeno tijelo je dodano unutar definicije klase.
- Ispiลกite vrijednost ID-a varijable uz ostali tekst na konzoli. Imajte na umu da je ovo dodano unutar tijela funkcije printid(). Izvrลกit ฤe se samo kada se pozove funkcija printid().
- Kraj tijela funkcije printid().
- Kraj tijela razreda Guru99.
- Poฤetak definicije funkcije printname().
- Ispiลกite vrijednost varijable tutorial_name na konzoli uz ostali tekst. Imajte na umu da je ovo dodano unutar tijela printname() funkcije. Izvrลกit ฤe se samo kada se pozove funkcija printname().
- Kraj definicije printname() funkcije.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
- Stvori instancu klase Guru99 i dajuฤi mu ime guru99.
- Koristite gornju instancu da biste dodijelili vrijednost C++ na varijablu tutorial_name.
- Upotrijebite instancu guru99 da dodijelite vrijednost 1001 varijabli id.
- Koristite instancu guru99 za poziv funkcije printname() .
- Pozovite naredbu end (end line) za ispis novog praznog retka na konzoli.
- Koristite instancu guru99 za poziv funkcije printid().
- Program mora vratiti vrijednost nakon uspjeลกnog zavrลกetka.
- Kraj tijela funkcije main().
Dvije posebne funkcije ฤlanice automatski se izvrลกavaju kada se objekt stvori i kada se uniลกti.
Konstruktori i destruktori
ล to je konstruktor?
Konstruktori su posebne funkcije koje inicijaliziraju objekte. C++ Sastavljaฤi Pozovite konstruktor prilikom stvaranja objekta. Konstruktori pomaลพu u dodjeljivanju vrijednosti ฤlanovima klase. Naravno, to je nakon ลกto im je dodijeljen odreฤeni memorijski prostor.
ล to je destruktor?
Destruktori s druge strane pomaลพu u uniลกtavanju objekata klase.
Naziv konstruktora mora biti sliฤan nazivu klase. Konstruktori nemaju povratnu vrstu.
Konstruktor se moลพe definirati unutar ili izvan tijela klase. Ako je definirano izvan tijela klase, treba biti definirano s nazivom klase i operatorom razluฤivanja opsega (::).
Primjer 5
#include <iostream> using namespace std; class ClassA { public: ClassA() { cout << "Class constructor called"<<endl; } ~ClassA() { cout << "Class destructor called"<<endl; } }; int main() { ClassA a; int p = 1; if (p) { ClassA b; } }
Izlaz:
Evo snimke zaslona koda:
Code Objaลกnjenje:
- Ukljuฤite datoteku zaglavlja iostreama u kรดd da biste koristili njegove funkcije.
- Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
- Napravite klasu pod nazivom ClassA.
- Koristite modifikator javnog pristupa da oznaฤite ฤlana kojeg ฤemo stvoriti kao javno dostupnog.
- Napravite konstruktor za klasu.
- Tekst za ispis na konzoli kada se pozove konstruktor. Kraj je a C++ kljuฤna rijeฤ, ลกto znaฤi zavrลกni redak. Pomiฤe kursor miลกa u sljedeฤi redak.
- Kraj tijela konstruktora klase.
- Napravite destruktor za klasu.
- Tekst za ispis na konzoli kada se pozove destruktor. Kraj je a C++ kljuฤna rijeฤ, ลกto znaฤi zavrลกni redak. Pomiฤe kursor miลกa u sljedeฤi redak.
- Kraj tijela razaraฤa.
- Kraj tijela razreda.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
- Napravite objekt klase i dajte mu ime a. Pozvat ฤe se konstruktor.
- Napravite cjelobrojnu varijablu pod nazivom p i dodijelite joj vrijednost 1.
- Stvorite blok naredbe if pomoฤu varijable p.
- Napravite objekt klase i dajte mu ime b. Pozvat ฤe se destruktor.
- Kraj tijela naredbe if.
- Kraj tijela funkcije main().








