C++ Klasa i objekt s primjerom

Š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 za kuću. Prikazuje položaj i veličinu vrata, prozora, podova itd. Iz ovih opisa možemo izgraditi kuću. Kuća postaje objekt. Moguće je stvoriti mnoge kuće iz prototipa. Također, moguće je kreirati mnoge objekte iz klase.

C++ Klasa

Na gornjoj slici imamo prototip jedne kuće. Od ovog prototipa stvorili smo dvije kuće s različitim značajkama.

Klasna deklaracija

U C+, klasa je definirana 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
   };
  • Ime klase je ime koje treba dodijeliti klasi.
  • Podaci su podaci za klasu, obično deklarirani kao varijable.
  • Funkcije su funkcije klase.

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.

Definicija objekta

Objekti se stvaraju iz klasa. Objekti klase se deklariraju na sličan način kao što se deklariraju varijable. Ime klase mora započeti, nakon čega slijedi naziv objekta. Objekt tipa klase.

Sintaksa

class-name object-name;
  • Ime klase je ime klase iz koje će se kreirati objekt.
  • Ime objekta je ime koje se treba dodijeliti novom objektu.

Ovaj proces stvaranja objekta iz klase poznat je kao instanciranje.

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:

Pristup članovima podataka

Evo snimke zaslona koda:

Pristup članovima podataka

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja u naš kod kako biste koristili njezine funkcije.
  2. Uključivanje std imenskog prostora u naš kod za korištenje njegovih klasa bez pozivanja.
  3. Deklarirajte klasu pod nazivom Phone.
  4. Korištenje modifikatora javnog pristupa za označavanje varijabli koje ćemo izraditi kao javno dostupnih.
  5. Deklarirajte varijabilni trošak dvostrukog tipa podataka.
  6. Deklarirajte cjelobrojnu varijablu pod nazivom slots.
  7. Kraj tijela razreda.
  8. Pozivanje glavne () funkcije. Programsku logiku treba dodati unutar njegovog tijela.
  9. Kreirajte objekt pod nazivom Y6 tipa Phone. To se zove instanciranje.
  10. Kreirajte objekt pod nazivom Y7 tipa Phone. To se zove instanciranje.
  11. 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.
  12. Pristupite utorima za varijable/članove klase Phone pomoću objekta Y6. Vrijednost je postavljena na 2. Utori za Y6 sada su postavljeni na 2.
  13. 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.
  14. Pristupite utorima za varijable/članove klase Phone pomoću objekta Y7. Vrijednost je postavljena na 2. Utori za Y7 sada su postavljeni na 2.
  15. Ispišite cijenu Y6 na konzoli uz ostali tekst.
  16. Ispišite cijenu Y7 na konzoli uz ostali tekst.
  17. Ispišite broj utora za Y6 uz ostali tekst.
  18. Ispišite broj utora za Y7 uz ostali tekst.
  19. Program mora vratiti vrijednost nakon uspješnog završetka.
  20. Kraj tijela funkcije main().

Š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.

Š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 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:

Pristup članovima podataka

Evo snimke zaslona koda:

Pristup članovima podataka

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  2. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom ClassA.
  4. Koristite modifikator javnog pristupa da označite člana klase koji će se stvoriti kao javno dostupan.
  5. Napravite funkciju pod nazivom set_a() koja uzima jednu cjelobrojnu vrijednost val.
  6. Napravite funkciju pod nazivom get_a().
  7. Upotrijebite modifikator privatnog pristupa da označite člana klase koji će se stvoriti kao privatno pristupačan.
  8. Deklarirajte cjelobrojnu varijablu pod imenom a.
  9. Kraj tijela razreda.
  10. Za pristup funkciji get_a() upotrijebite naziv klase i operator rezolucije opsega. Želimo definirati što funkcija radi kada se pozove.
  11. Funkcija get_a() trebala bi vratiti vrijednost varijable a kada se pozove.
  12. Kraj definicije funkcije get_a().
  13. Za pristup funkciji set_a() upotrijebite naziv klase i operator rezolucije opsega. Želimo definirati što funkcija radi kada se pozove.
  14. Dodjeljivanje vrijednosti varijable val varijabli a.
  15. Kraj definicije funkcije set_a().
  16. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
  17. Napravite instancu ClassA i dajte joj ime a.
  18. Koristite gornju instancu klase i funkciju set_a() da dodijelite vrijednost 20 varijabli a.
  19. Ispis nekog teksta uz vrijednost varijable a na konzoli. Vrijednost varijable a dobiva se pozivom funkcije get_a().
  20. Program mora vratiti vrijednost nakon uspješnog završetka.
  21. Kraj tijela funkcije main().

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:

Pristup članovima podataka

Evo snimke zaslona koda:

Pristup članovima podataka

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  2. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom ParentClass.
  4. Koristite modifikator zaštićenog pristupa da označite člana klase koji će se stvoriti kao zaštićen.
  5. Napravite cjelobrojnu varijablu pod nazivom vrijednost.
  6. Kraj tijela razreda.
  7. Napravite novu klasu pod nazivom ChildClass koja nasljeđuje ParentClass.
  8. Upotrijebite modifikator zaštićenog pristupa da označite člana klase koji će se stvoriti kao pristupačan klasama podređenim.
  9. Napravite funkciju pod nazivom setId() koja uzima jednu cjelobrojnu vrijednost x.
  10. Pridjeljivanje vrijednosti varijable x vrijednosti varijable.
  11. Kraj definicije funkcije setId().
  12. Napravite funkciju pod nazivom displayValue().
  13. Ispišite vrijednost varijable pod nazivom vrijednost na konzoli uz ostali tekst.
  14. Kraj tijela funkcije displayValue().
  15. Kraj tijela klase pod nazivom ChildClass.
  16. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
  17. Napravite instancu ChildClass i dajte joj ime c.
  18. Koristite gornju instancu klase i funkciju setId() da dodijelite vrijednost 21 varijabli x.
  19. Koristite gornju instancu klase za poziv funkcije pod nazivom displayValue().
  20. Program mora vratiti vrijednost nakon uspješnog završetka.
  21. Kraj tijela funkcije main().

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 2

#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:

Funkcije članova klase

Evo snimke zaslona koda:

Funkcije članova klase

Objašnjenje koda:

  1. Uključite datoteku zaglavlja iostream u naš program da biste koristili njegove funkcije.
  2. Uključite datoteku zaglavlja niza u naš program da biste koristili njegove funkcije.
  3. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  4. Napravite klasu pod nazivom Guru99.
  5. Koristite modifikator javnog pristupa da označite članove klase koje ćemo stvoriti kao javno dostupne.
  6. Stvorite string varijablu pod nazivom tutorial_name.
  7. Napravite cjelobrojnu varijablu imena id.
  8. Napravite funkciju pod nazivom printname(). Ova funkcija nije definirana unutar definicije klase.
  9. Napravite funkciju pod nazivom printed(). Ova je funkcija definirana unutar definicije klase. Njegovo tijelo je dodano unutar definicije klase.
  10. 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().
  11. Kraj tijela funkcije printid().
  12. Kraj tijela klase Guru99.
  13. Početak definicije funkcije printname().
  14. 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().
  15. Kraj definicije printname() funkcije.
  16. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
  17. Napravite instancu klase Guru99 i dajte joj ime guru99.
  18. Koristite gornju instancu da biste dodijelili vrijednost C++ na varijablu tutorial_name.
  19. Upotrijebite instancu guru99 da dodijelite vrijednost 1001 varijabli id.
  20. Koristite instancu guru99 za poziv funkcije printname() .
  21. Pozovite naredbu end (end line) za ispis novog praznog retka na konzoli.
  22. Koristite instancu guru99 za poziv funkcije printid().
  23. Program mora vratiti vrijednost nakon uspješnog završetka.
  24. Kraj tijela funkcije main().

Konstruktori i destruktori

Što je Konstruktori?

Konstrukti su posebne funkcije koje inicijaliziraju objekte. The C++ Sastavljači poziva konstruktor prilikom kreiranja objekta. Konstruktori pomažu u dodjeljivanju vrijednosti članovima klase. Naravno, to je nakon što im se dodijeli nešto memorijskog prostora.

Što je Destructors?

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 3

#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:

Konstruktori i destruktori

Evo snimke zaslona koda:

Konstruktori i destruktori

Objašnjenje koda:

  1. Uključite datoteku zaglavlja iostreama u kôd da biste koristili njegove funkcije.
  2. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  3. Napravite klasu pod nazivom ClassA.
  4. Koristite modifikator javnog pristupa da označite člana kojeg ćemo stvoriti kao javno dostupnog.
  5. Napravite konstruktor za klasu.
  6. 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.
  7. Kraj tijela konstruktora klase.
  8. Napravite destruktor za klasu.
  9. 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.
  10. Kraj tijela razarača.
  11. Kraj tijela razreda.
  12. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
  13. Napravite objekt klase i dajte mu ime a. Pozvat će se konstruktor.
  14. Napravite cjelobrojnu varijablu pod nazivom p i dodijelite joj vrijednost 1.
  15. Stvorite blok naredbe if pomoću varijable p.
  16. Napravite objekt klase i dajte mu ime b. Pozvat će se destruktor.
  17. Kraj tijela naredbe if.
  18. Kraj tijela funkcije main().

rezime

  • C++ je objektno orijentiran.
  • Klase čine glavne značajke C++ koji ga čine objektno orijentiranim.
  • A C++ klasa kombinira podatke i metode za manipuliranje podacima u jednu.
  • Klasa je nacrt za objekt.
  • Klase određuju oblik objekta.
  • Podaci i metode sadržani u klasi poznati su kao članovi klase.
  • Za pristup članovima klase trebali biste koristiti instancu klase.
  • Za izradu klase koristimo ključnu riječ class.
  • Funkcije članova klase mogu se definirati unutar ili izvan klase.