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.

  • 🔷 Nacrt razreda: A C++ Klasa objedinjuje podatkovne članove i funkcije članova u jedan korisnički definirani tip.
  • 🔑 Modifikatori pristupa: Ključne riječi private, public i protected kontroliraju gdje se članovima klase može pristupiti.
  • 🧱 Instanciranje objekta: Objekt se stvara iz klase pomoću sintakse naziv-klase naziv-objekta.
  • ???? Pristup za članove: Operator točka dopire do javnih članova, dok funkcije članova manipuliraju pohranjenim podacima.
  • Konstruktori: Konstruktori automatski inicijaliziraju objekte, a destruktori ih oslobađaju kada izađu izvan dosega.
  • 🤖 AI pomoć: GitHub Copilot i slični AI asistenti grade definicije klasa i konstruktore iz kratkog komentara.

C++ Klasa i objekt

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

C++ razred kao nacrt za objekte

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:

C++ pristup javnim članovima podataka Primjer 1 izlaz

Evo snimke zaslona koda:

C++ pristup javnim članovima podataka Primjer 1 koda

Code Objašnjenje:

  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().

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:

C++ Izlaz člana privatne klase Primjer 2

Evo snimke zaslona koda:

C++ Primjer 2 koda člana privatne klase

Code Objašnjenje:

  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().

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:

C++ Izlaz zaštićenog člana klase Primjer 3

Evo snimke zaslona koda:

C++ Primjer 3 koda nasljeđivanja zaštićenih klasa

Code Objašnjenje:

  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().

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:

C++ Izlaz funkcija članica klase Primjer 4

Evo snimke zaslona koda:

C++ Primjer 4 koda funkcija članica klase

Code Objašnjenje:

  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. Stvorite klasu pod nazivom Guru99.
  5. Upotrijebite modifikator javnog pristupa kako biste označili č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. Kreirajte funkciju pod nazivom printid(). Ova funkcija je definirana unutar definicije klase. Njeno 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 razreda 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. Stvori instancu klase Guru99 i dajući mu 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().

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:

C++ konstruktor i destruktor Primjer 5 izlaz

Evo snimke zaslona koda:

C++ konstruktor i destruktor Primjer 5 koda

Code Objašnjenje:

  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().

Pitanja i odgovori

Klasa je korisnički definirani nacrt koji grupira članove podataka i funkcije članova u jedan tip. Objekt je konkretna instanca izgrađena iz te klase koja sadrži vlastitu kopiju podataka opisanih nacrtom.

Glavna razlika je zadani pristup: članovi klase su privatni prema zadanim postavkama, dok su članovi struktura su prema zadanim postavkama javni. Oba podržavaju nasljeđivanje, konstruktore i enkapsulaciju u C++.

C++ podržava tri uobičajena tipa konstruktora: zadani konstruktor bez argumenata, parametrizirani konstruktor koji prihvaća vrijednosti za inicijalizaciju članova i konstruktor kopiranja koji stvara novi objekt iz postojećeg objekta iste klase.

Prijateljska funkcija je funkcija koja nije član klase i kojoj je dodijeljen pristup privatnim i zaštićenim članovima klase. Deklarira se unutar klase ključnom riječi friend, ali se definira izvan nje kao obična funkcija.

Pokazivač this je implicitni pokazivač dostupan unutar svake nestatičke funkcije članice. Pokazuje na objekt koji je pozvao funkciju, omogućujući kodu da se poziva na članove tog objekta i rješava sukobe imenovanja između parametara i članova podataka.

Enkapsulacija objedinjuje podatke i funkcije koje na njima rade unutar jedne klase, a zatim skriva interne detalje pomoću privatnih članova. Javne funkcije članova otkrivaju kontrolirano sučelje, štiteći podatke od slučajnog ili neovlaštenog pristupa.

Da. AI asistenti za kodiranje pretvaraju kratki upit ili komentar u definicije radne klase, uključujući članove podataka, specifikatore pristupa, konstruktore i funkcije članova. Uvijek pregledajte generirane razine pristupa i logiku inicijalizacije prije kompajliranja koda.

Da. GitHub kopilot predlaže deklaracije klasa, konstruktore, gettere i settere dok tipkate. Brzo obrađuje ponavljajuće standardne postavke, iako biste i dalje trebali provjeriti pristup članova, logiku konstruktora i korištenje objekta prije izgradnje.

Sažmite ovu objavu uz: