classes objects c
Kratki uvod u nastavu i predmete na C ++.
Klase i objekti su gradivni elementi objektno orijentiranog programiranja u C ++-u. Svaki entitet, živi ili neživi može se predstaviti kao objekt i programirati u skladu s tim pomoću C ++. Tako se entiteti poput automobila, stola, osobe, ptice, životinje itd. Mogu predstaviti kao predmeti.
Klasa je razina viša od objekta i predstavlja kategoriju predmeta. Dakle, klasa djeluje kao nacrt koji ocrtava dizajn predmeta i detalje. To uključuje podatke koji se koriste za opisivanje objekta i razne metode ili funkcije koje mogu djelovati na podatke o objektu.
=> Ovdje pripazite na jednostavne serije obuke za C ++.
U ovom uputstvu raspravljamo o svim detaljima klase i objekata u C ++-u, zajedno s njihovim programskim prikazom.
Što ćete naučiti:
- Nastava
- Predmeti
- Specifikacije pristupa
- Konstruktori
- Vrste konstruktora
- Operator dodjele
- Razarači
- 'Ovaj' Pointer
- Zaključak
- Preporučena literatura
Nastava
Klasa na C ++ može se promatrati kao nacrt ili kostur određenog entiteta. Klasa je korisnički definirani tip podataka. Sadrži opće informacije ili podatke za taj određeni entitet i funkcije koje djeluju na taj entitet.
U sintaksi C ++ definiramo klasu s ključnom riječi 'class' nakon koje slijedi naziv klase.
Nakon klase slijede detalji klase zatvoreni kovrčavim zagradama i završava se zarezom.
Sljedeći blok prikazuje opću sintaksu za definiciju klase.
Kao što je prikazano u gornjem predstavljanju, klasa može imati specifikatore pristupa poput javnog / zaštićenog / privatnog. Može imati članove podataka i funkcije članova. Podaci i funkcije pozivaju se kao članovi klase. Prema zadanim postavkama, članovi su privatni za klasu, tako da nijedan vanjski entitet nema pristup tim članovima.
Na primjer, vozilo može biti generalizirana klasa koja ima svojstva poput modela, boje, broja šasije, prosječne brzine itd. Može imati funkcije kao što su changeModel, ubrzanje, usporavanje itd. koje izvode radnje na članovima podataka. Možemo definirati klasu nazvanu 'vozilo' koja će imati sve ove članove podataka i funkcije.
Kao što je već spomenuto, klasa je samo nacrt entiteta. Ne zauzima nikakav prostor u memoriji kad je definiran. Da bi klasa bila funkcionalna, moramo definirati objekte koji mogu koristiti članove klase.
Predmeti
Da bismo koristili funkcionalnost klase, moramo stvoriti instancu za izradu objekta. Objekt je instanca klase. Jednostavnim riječima, možemo reći da je objekt varijabla tipa klase.
Opća sintaksa za stvaranje objekta je:
classname object_name;
Jednom kada je objekt stvoren, može se koristiti za pristup članovima podataka i funkcijama te klase.
Pristup članovima klase (podacima i funkcijama) vrši se pomoću operatora dot (.), Koji se naziva i operatorom za pristup članovima.
Ako je obj ime objekta i ako u klasi postoji funkcija 'display ()', tada se funkciji može pristupiti kao 'obj.display ()'.
Međutim, u gornjoj izjavi postoji kvaka. Prikazu funkcije () možemo pristupiti pomoću objekta i operatora točke ako je funkcija 'javna'.
Specifikacije pristupa
U C ++-u pristup članovima podataka i funkcijama u klasi ovisi o pristupu danom tom članu podataka ili funkciji pomoću specifikatora pristupa.
C ++ podržava sljedeće specifikatore pristupa:
# 1) Privatno
Ovo je zadani specifikator pristupa za klasu na C ++. To znači da ako se za članove klase ne navede specifikator pristupa, tada se smatra privatnim.
Kad je član privatan, ne može mu se pristupiti izvan razreda. Čak ni korištenje objekta i operatora točke. Članovima privatnih podataka može se pristupiti samo pomoću funkcija člana klase.
što je mrežni sigurnosni ključ za bežičnu mrežu
Međutim, postoji iznimka od ovog pravila, o kojoj ćemo raspravljati u našim kasnijim temama.
# 2) Javno
Član podataka ili funkcija koja je definirana kao javna u razredu dostupna je svima izvan razreda. Ovim članovima se može pristupiti pomoću objekta i točke operatora.
# 3) Zaštićeno
Zaštićeni član razreda dostupan je samom razredu i podređenim razredima tog razreda.
Ovaj se specifikator pristupa posebno koristi u slučaju nasljeđivanja i o tome ćemo detaljno razgovarati dok ćemo raspravljati o temi nasljeđivanja.
Uzmimo sljedeći primjer da bismo bolje razumjeli ove specifikatore pristupa.
#include #include using namespace std; class ABC{ int var1 = 10; public: string name; void display() { cout<<'var1 ='< Izlaz:
var1 = 10
ime = sth
U ovom programu imamo dva člana podataka od kojih je var1 tipa int privatan (specifikator pristupa nije naveden. Zadani je privatan). Drugi član je naziv niza koji je proglašen javnim. Imamo još jedan zaslon funkcije koji prikazuje vrijednost oba ova člana.
U glavnoj funkciji deklariramo objekt abc klase ABC. Zatim postavljamo vrijednosti članovima podataka i također prikaz funkcije poziva pomoću objekta 'abc'.
Međutim, kada prevoditelj naiđe na redak abc.var1 = 20; generirat će pogrešku da je 'var1 privatna varijabla'.
To je zato što ne možemo pristupiti privatnim podacima članovima klase izvan klase. Stoga postoji pogreška. Ali možemo mu pristupiti unutar funkcije i stoga kad u funkciji prikaza iznesemo vrijednost var1; ne baca nikakvu pogrešku.
Stoga izlaz programa prikazuje početnu vrijednost s kojom je deklariran var1.
Do sada smo vidjeli detalje o razredima, objektima i specifikatorima pristupa, sada ćemo uzeti cjelovit primjer uzorka učenika razreda. Ovaj razred ima članove podataka: student_id, student_name i student_age. Također ima funkcije člana za čitanje podataka o studentu i prikaz podataka o studentu.
Kako bismo čitateljima olakšali stvari, proglasili smo sve članove razreda javnima.
Sljedeći program prikazuje kompletnu provedbu.
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; void read_studentInfo(); void print_studentInfo() { cout<<'
Student ID : '<student_id; cout<>student_name; cout<>student_age; } int main() { student s1; s1.read_studentInfo(); s1.print_studentInfo(); }
Izlaz:
Unesite studentski ID: 1
Unesite ime_učenika: abc
Unesite student_age: 12
kako mogu pogledati eps datoteku
Student ID: 1
Ime studenta: abc
Dob učenika: 12
Dakle, imamo kompletnu klasu gore definiranu. Jedina značajna razlika je u tome što smo definirali jednu funkciju 'print_studentInfo' unutar klase, dok je druga funkcija 'read_studentinfo' definirana izvan klase. To su dva načina na koje se funkcije člana mogu definirati za klasu.
Imajte na umu da funkcija koja je definirana vani još uvijek ima deklaraciju / prototip unutar klase. Također, definira se izvan klase pomoću operater razlučivosti opsega (: :) . Zatim u glavnoj funkciji kreiramo objekt studentske klase, a zatim pozivamo funkcije za čitanje i prikaz podataka.
Konstruktori
Do sada smo u ovom vodiču stvorili jednostavan objekt i zatim dodijelili vrijednosti svakom članu podataka klase u glavnoj funkciji nakon čitanja tih vrijednosti sa standardnog ulaza.
U ovoj ćemo temi pogledati posebnu funkciju koja se koristi za inicijalizaciju objekta tijekom njegovog stvaranja. Ova posebna funkcija naziva se konstruktor.
Konstruktor je funkcija člana klase, ali se razlikuje od normalne funkcije člana na sljedeće načine:
- Konstruktor nema povratnu vrijednost, tj. Konstruktor nikada ne vraća vrijednost.
- To je javna funkcija člana.
- Koristi se za inicijalizaciju članova podataka i konstrukciju objekta klase.
- Kompajler ga automatski poziva kada se objekt izrađuje.
Vrste konstruktora
C ++ podržava sljedeće tipove konstruktora.
# 1) Zadani konstruktor
Zadani konstruktor je osnovni konstruktor i nema parametre. Pomoću zadanog konstruktora možemo stvoriti jednostavan objekt bez ikakvih parametara.
Zadani konstruktor ima sljedeću sintaksu:
classname() { //constructor code }
Ako klasa nema zadani konstruktor, tada je prevodilac stvara.
# 2) Parametarski konstruktor
Parametarski konstruktor je onaj koji ima popis parametara pomoću kojeg možemo inicijalizirati članove klase. Kada deklariramo objekt u parametriziranom konstruktoru, tada trebamo proslijediti početne vrijednosti funkciji konstruktora kao parametre.
Parametrizirana funkcija konstruktora izgleda kao što je prikazano dolje.
classname(argument list){ //constructor code }
Parametarski konstruktor koristi se za preopterećenje konstruktora. O preopterećenju ćemo vidjeti više u našim kasnijim temama.
Parametarizirani konstruktor koristi se u svrhu inicijalizacije članova podataka različitih objekata. Pritom različitim objektima možemo prosljeđivati različite vrijednosti članova podataka.
# 3) Konstruktori za kopiranje
C ++ podržava treću vrstu konstruktora poznatu kao Kopiraj konstruktor. Njegov opći oblik je
ime klase (const ime klase & obj);
Kao što je prikazano u gornjoj deklaraciji, u konstruktoru kopija stvara se novi objekt koristeći vrijednosti drugog objekta iste klase. Parametar koji se prosljeđuje konstruktoru je konstantna referenca objekta čije će se vrijednosti koristiti za izgradnju novog objekta.
Konstruktor kopije obično se poziva u sljedećim situacijama:
- Kada se objekt klase vrati po vrijednosti.
- Kada se objekt preda funkciji kao argument i proslijedi po vrijednosti.
- Kada se objekt konstruira od drugog objekta iste klase.
- Kada kompajler generira privremeni objekt.
Međutim, ne možemo garantirati da će konstruktor kopiranja sigurno biti pozvan u svim gore navedenim slučajevima jer C ++ kompajler ima način za optimizaciju operacija kopiranja.
Konstruktor kopiranja vrši kopiranje u člancima između objekata. Baš kao zadani konstruktor, C ++ kompajler stvara zadani konstruktor kopije ako ga ne pružimo u našem programu. Ali kada klasa ima određene članove podataka poput pokazivača, referenci ili bilo koje runtom alokacije resursa, tada trebamo imati vlastiti korisnički definirani konstruktor kopija.
Razlog je taj što zadani konstruktor kopija izvodi samo plitku kopiju članova podataka, tj. Oba objekta dijelit će isto memorijsko mjesto. Ovo je u redu za jednostavne članove podataka koji nisu pokazivači.
Međutim, kada su u pitanju pokazivači ili bilo koji drugi članovi dinamičkih podataka, željeli bismo da podaci budu usmjereni na novo memorijsko mjesto. Ovo je dubinska kopija i može se postići samo pomoću korisnički definiranog konstruktora kopija.
Dolje je dan cjelovit program C ++ koji implementira sve tri vrste konstruktora i njihovu upotrebu u konstrukciji objekta.
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; //default constructor student(){ student_id = 1; student_name = 'abc'; student_age = 10; } //parameterized constructor student(int id,string name,int age){ student_id = id; student_name = name; student_age = age; } //copy constructor student(const student& st){ student_id = st.student_id; student_name = st.student_name; student_age = st.student_age; } void print_studentInfo() { cout<<'
Student ID : '< Izlaz:
********** s **********
Student ID: 1
Ime studenta: abc
Dob učenika: 10
********** s2 **********
Student ID: 2
Ime učenika: xyz
Dob učenika: 12
Snimak zaslona za isti dat je u nastavku.

U ovom smo programu definirali učenika razreda koji je sličan onome iz prethodnog programa. Razlika je u tome što umjesto čitanja vrijednosti članova podataka sa standardnog unosa kroz funkciju definiramo tri konstruktora.
Apsolutno je moguće da klasa ima više konstruktora. Imamo zadani konstruktor koji inicijalizira članove podataka na početne vrijednosti. Dalje, definiramo parametarski konstruktor koji konstruktoru prosljeđuje početne vrijednosti kao parametre.
Dalje, definiramo konstruktor kopije kojem prosljeđujemo stalnu referencu na objekt studentskog razreda.
U glavnoj funkciji izrađujemo tri objekta odvojeno pomoću tri konstruktora. Prvi objekt s kreira se pomoću zadanog konstruktora. Drugi objekt s1 kreira se pomoću parametriziranog konstruktora, dok se treći objekt s2 kreira pomoću konstruktora kopiranja.
Primijetite stvaranje trećeg objekta s2. Ovdje već stvoreni objekt s1 dodjeljujemo novom objektu s2. Dakle, kada konstruiramo novi objekt pomoću već postojećeg objekta, sastavljač poziva konstruktor kopije.
Operator dodjele
Također možemo dodijeliti vrijednosti jednog objekta drugom pomoću operatora dodjele (=). U ovom slučaju imat ćemo izjavu poput s1 = s.
Razlika između konstruktora kopije i operatora dodjele je u tome što dok konstruktor kopije konstruira u potpunosti novi objekt, operator dodjele samo dodjeljuje vrijednosti člana objekta na RHS vrijednosti objekta na LHS-u. To znači da objekti s obje strane operatora dodjele moraju postojati prije dodjele.
Razarači
Destruktor je također posebna funkcija poput konstruktora, ali implementira funkcionalnost koja je upravo suprotna konstruktoru. Dok se konstruktor koristi za stvaranje objekta, destruktor se koristi za uništavanje ili brisanje objekta.
Neke od karakteristika destruktora uključuju:
- Ime destruktora isto je što i ime klase, ali započinje znakom tilde (~).
- Destruktor nema povratni tip.
- Destruktor nema argumenata.
- U klasi može biti samo jedan destruktor.
- Kompajler uvijek kreira zadani destruktor ako ga ne pružimo za klasu.
Opća sintaksa destruktora je:
~classname(){ //cleanup code }
Destruktor klase obično se naziva u sljedećim situacijama:
- Kad objekt izlazi iz opsega, tada se automatski poziva destruktor klase.
- Slično tome, destruktor se poziva kada program završi izvršenje. To znači da svi predmeti također prestaju postojati. Stoga će se pozvati destruktor svakog objekta.
- Destruktor klase također se poziva kada se izvrši operator 'delete' za brisanje objekta.
- Destruktor također možemo izričito pozvati da izvrši bilo kakve aktivnosti čišćenja nakon što završimo s funkcionalnošću objekta.
Slijedeći primjer pokazuje rad destruktora.
#include using namespace std; class sample{ public: sample(){ cout<<'Constructor::sample called'< Izlaz:
Konstruktor :: uzorak pozvan
Ovo je uzorak klase
Destructor :: ~ pozvan uzorak
Snimak zaslona za gornji izlaz dat je u nastavku.

Definirali smo uzorak klase u kojem smo definirali konstruktor, destruktor i prikaz funkcije. U glavnoj funkciji kreiramo objekt obj uzorka klase, a zatim pozivamo funkciju prikaza na ovom objektu.
Nakon toga se izvršava povrat 0. U izlazu možemo vidjeti da se trenutak kada se funkcija prikaza vrati i programska kontrola dođe do naredbe return 0 izvrši destruktor. To znači da se izvršava u trenutku kada objekt izlazi iz opsega.
'Ovaj' Pointer
C ++ koristi poseban koncept povezan s objektima, koji je poznat kao 'ovaj' pokazivač. Pokazivač 'this' uvijek pokazuje na trenutni objekt. Stoga, ovisno o situaciji, kad god se moramo uputiti na trenutni objekt, koristimo pokazivač 'this'.
Znamo da se svaki put kada se stvori instanca klase, tj. Objekt, za objekt napravi zasebna kopija članova podataka klase. Ali što se tiče funkcija člana klase, svi objekti dijele istu kopiju.
Dakle, kada jedan ili više objekata istovremeno pristupaju funkcijama članova, kako onda osigurati da funkcije članova pristupaju i mijenjaju odgovarajuće članove podataka?
Ovo je mjesto na kojem 'ovaj' pokazivač stupa u akciju. Kompajler prosljeđuje implicitni pokazivač s imenom funkcije kao 'ovo'. To se naziva pokazivač 'ovaj'.
u sekundi stvorite lažnu e-adresu
Pokazivač “this” prosljeđuje se kao skriveni argument svim pozivima funkcije člana. Obično je lokalna varijabla. Stoga je pokazivač 'ovaj' stalni pokazivač i njegov je sadržaj memorijska adresa trenutnog objekta.
Imajte na umu da je ovaj pokazivač dostupan samo za nestatične funkcije člana, a ne i za statičke funkcije. To je zato što statičkim funkcijama nije potrebno pristupiti pomoću objekta. Može im se izravno pristupiti pomoću naziva klase.
Obično koristimo pokazivač 'this' u situacijama kada se varijable člana i parametri prosljeđuju za inicijalizaciju varijabli člana koje dijele isto ime. Koristimo ga i kada trebamo vratiti trenutni objekt iz funkcije.
Pogledajmo dolje demonstraciju pokazivača 'ovaj'.
#include using namespace std; class Sample { private: int num; char ch; public: Sample &setParam(int num, char ch){ this->num =num; this->ch = ch; return *this; } void printValues(){ cout<<'num = '< Izlaz:
num = 100
ch = A
U gore navedenom programu imamo klasu pod nazivom Uzorak, s dva člana podataka num i ch. Imamo funkciju člana setParam koja prolazi parametre s istim imenima, num i ch za postavljanje vrijednosti varijabli člana.
Unutar funkcije, ove vrijednosti dodjeljujemo trenutnim varijablama člana objekta naznačenim ovim pokazivačem. Jednom kada su postavljene vrijednosti, trenutni objekt 'this' vraća se iz funkcije.
U glavnoj funkciji prvo stvaramo objekt klase Sample, obj i pozivamo funkciju setParam za postavljanje vrijednosti, a zatim pozivamo funkciju printValues za ispis vrijednosti.
Zaključak
U ovom smo tutorijalu naučili osnovne građevne blokove OOP-a na jeziku C ++. Razumijevanje klasa i objekata primarni su zahtjevi, za početak, OOP u jeziku C ++. Također smo detaljno naučili o konstruktorima i destruktorima s primjerima.
U našem nadolazećem uputstvu naučit ćemo o popisima inicijalizatora u C ++.
=> Ovdje pripazite na jednostavne serije obuke za C ++.
Preporučena literatura
- Python OOPs koncepti (klase Python, objekti i nasljeđivanje)
- Java sučelje i udžbenik sažetka klase s primjerima
- Rad s VBScript Excel objektima
- QTP vodič # 7 - QTP-ova paradigma identifikacije objekata - Kako QTP jedinstveno identificira objekte?
- Spremište objekata u QTP-u - Vodič br. 22
- Rad s VBScript ADODB objektima povezivanja
- Runtime polimorfizam u C ++
- Nasljeđivanje u C ++