C++ Klass ja objekt koos näitega

⚡ Nutikas kokkuvõte

Klassid ja objektid C++ moodustavad objektorienteeritud programmeerimise aluse, kus klass määratleb andmete ja liikmesfunktsioonide plaani ning objekt on selle plaani põhjal loodud konkreetne eksemplar.

  • 🔷 Klassi plaan: A C++ Klass koondab andmeliikmed ja liikmefunktsioonid ühte kasutaja määratletud tüüpi.
  • 🔑 Juurdepääsu modifikaatorid: Märksõnad private, public ja protected kontrollivad, kus klassi liikmetele ligi pääseb.
  • 🧱 Objekti eksemplari loomine: Objekt luuakse klassist süntaksi class-name object-name abil.
  • 👉 Liikmete juurdepääs: Punktoperaator jõuab avalike liikmeteni, samas kui liikmefunktsioonid manipuleerivad salvestatud andmetega.
  • ⚙️ Konstruktorid: Konstruktorid initsialiseerivad objektid automaatselt ja destruktorid vabastavad need, kui need väljuvad ulatusest.
  • 🤖 AI abi: GitHub Copiloti ja sarnaste tehisintellekti assistentide tugisüsteemide klassidefinitsioonid ja konstruktorid lühikesest kommentaarist.

C++ Klass ja objekt

Mis on klass?

A C++ klass ühendab andmed ja meetodid andmetega manipuleerimiseks üheks. Klassid määravad ka objektide vormid. Klassis sisalduvaid andmeid ja meetodeid nimetatakse klassiliikmeteks. Klass on kasutaja määratud andmetüüp. Klassi liikmetele juurdepääsu saamiseks kasutame klassi eksemplari. Saate klassi näha objekti plaanina.

Klass võib olla maja prototüüp. See näitab uste, akende, põrandate jne asukohta ja suurusi. Nende kirjelduste põhjal saame maja ehitada. Majast saab objekt. Prototüübist on võimalik luua palju maju. Samuti on klassist võimalik luua palju objekte.

C++ klass kui objektide plaan

Ülaltoodud joonisel on meil ühe maja prototüüp. Sellest prototüübist oleme loonud kaks erinevate omadustega maja.

Klassi kui plaani ideed silmas pidades on järgmine samm vaadata, kuidas seda koodis deklareeritakse.

Klassi deklaratsioon

In C++, klass defineeritakse märksõna „class” abil. Sellele peaks järgnema klassi nimi. Seejärel lisatakse klassi sisu looksulgude { } vahele.

Süntaks

class class-name
   {
   // data
   // functions
   };
  • . klassi nimi on klassile määratav nimi.
  • . andmed on klassi andmed, mis tavaliselt deklareeritakse muutujatena.
  • . funktsioonid on klassifunktsioonid.

Klassi nime ja sisu deklareerimine tekitab loomulikult küsimuse, kes võib iga liiget kasutada.

Privaatsed ja avalikud märksõnad

Olete kindlasti nende kahe märksõnaga kokku puutunud. Need on juurdepääsu muutjad.

Private:

Kui privaatset märksõna kasutatakse funktsiooni või klassi määratlemiseks, muutub see privaatseks. Need on juurdepääsetavad ainult klassi seest.

Avalik:

Avalik märksõna seevastu muudab andmed/funktsioonid avalikuks. Need on juurdepääsetavad väljastpoolt klassi.

Pärast klassi olemasolu saab selle põhjal luua objekte, sarnaselt sellele, kuidas muutujaid luuakse andmetüübist.

Objekti määratlus

Objektid luuakse klassidest. Klassiobjektid deklareeritakse sarnaselt muutujate deklareerimisele. Klassi nimi peab olema esimene, millele järgneb objekti nimi. Objekt on klassi tüüpi.

Süntaks

class-name object-name;
  • . klassi nimi on klassi nimi, millest objekt luuakse.
  • . objekti nimi on uuele objektile määratav nimi.

Seda klassist objekti loomise protsessi nimetatakse instantseerimiseks.

Kui objekt on loodud, saab selle avalike liikmeteni otse lihtsa operaatori abil jõuda.

Juurdepääs andmete liikmetele

Klassi avalikele liikmetele juurdepääsemiseks kasutame (.)punkti operaatorit. Need on liikmed, mis on märgitud avaliku juurdepääsu modifikaatoriga.

Näiteks 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;
}

Väljund:

C++ avalike andmete liikmetele juurdepääs Näite 1 väljund

Siin on koodi ekraanipilt:

C++ avalikele andmetele juurdepääsu liikmete näide 1 kood

Code Selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
  2. Std-nimeruumi lisamine meie koodi, et kasutada selle klasse ilma seda kutsumata.
  3. Kuulutage klass nimega Telefon.
  4. Avaliku juurdepääsu modifikaatori kasutamine muutujate märkimiseks, mida me loome, avalikult juurdepääsetavateks.
  5. Deklareerige topeltandmetüübi muutuvkulu.
  6. Deklareerige täisarvuline muutuja nimega slots.
  7. Klassi keha lõpp.
  8. Funktsiooni main() kutsumine. Programmi loogika tuleks lisada selle kehasse.
  9. Looge objekt nimega Y6 tüübiga Telefon. Seda nimetatakse instantseerimiseks.
  10. Looge objekt nimega Y7 tüübiga Telefon. Seda nimetatakse instantseerimiseks.
  11. Juurdepääs klassi Telefon muutuv-/liikmekulule, kasutades objekti Y6. Väärtuseks on seatud 100.0. Y6 maksumuseks on nüüd määratud 100.0.
  12. Juurdepääs klassi Telefoni muutuja/liikme pesadele, kasutades objekti Y6. Väärtuseks on seatud 2. Y6 pesad on nüüd seatud väärtusele 2.
  13. Juurdepääs klassi Telefon muutuv-/liikmekulule, kasutades objekti Y7. Väärtuseks on seatud 200.0. Y7 maksumuseks on nüüd määratud 200.0.
  14. Juurdepääs klassi Telefoni muutuja/liikme pesadele, kasutades objekti Y7. Väärtuseks on seatud 2. Y7 pesad on nüüd seatud väärtusele 2.
  15. Printige Y6 maksumus konsoolile koos muu tekstiga.
  16. Printige Y7 maksumus konsoolile koos muu tekstiga.
  17. Printige Y6 pesade arv koos muu tekstiga.
  18. Printige Y7 pesade arv koos muu tekstiga.
  19. Programm peab pärast edukat lõpetamist tagastama väärtuse.
  20. Funktsiooni main() keha lõpp.

Avalikud liikmed on avatud välisele koodile, kuid privaatsed liikmed järgivad palju rangemaid juurdepääsureegleid.

Mis on eraklass?

Privaatseks märgitud klassi liikmetele pääsevad juurde ainult klassis määratletud funktsioonid. Ükski väljaspool klassi määratletud objekt või funktsioon ei saa sellistele liikmetele otse juurde pääseda. Privaatklassi liikmele pääseb juurde ainult liikme ja sõbra funktsioonid.

Näiteks 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;
}

Väljund:

C++ Privaatse klassi liikme näide 2 väljund

Siin on koodi ekraanipilt:

C++ Privaatse klassi liikme näide 2 kood

Code Selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
  2. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega ClassA.
  4. Kasutage avaliku juurdepääsu modifikaatorit, et märkida loodava klassi liige avalikult juurdepääsetavaks.
  5. Looge funktsioon nimega set_a(), mis võtab ühe täisarvu väärtuse val.
  6. Looge funktsioon nimega get_a().
  7. Kasutage privaatse juurdepääsu modifikaatorit, et märkida loodava klassi liige privaatselt juurdepääsetavaks.
  8. Deklareerida täisarvuline muutuja nimega a.
  9. Klassi keha lõpp.
  10. Funktsiooni get_a() kasutamiseks kasutage klassi nime ja ulatuse eraldusvõime operaatorit. Tahame määratleda, mida funktsioon käivitamisel teeb.
  11. Funktsioon get_a() peaks käivitamisel tagastama muutuja a väärtuse.
  12. Funktsiooni get_a() definitsiooni lõpp.
  13. Funktsioonile set_a() pääsemiseks kasutage klassi nime ja ulatuse eraldusvõime operaatorit. Tahame määratleda, mida funktsioon käivitamisel teeb.
  14. Muutuja val väärtuse omistamine muutujale a.
  15. Funktsiooni set_a() definitsiooni lõpp.
  16. Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
  17. Looge klassi A eksemplar ja andke sellele nimi a.
  18. Kasutage ülaltoodud klassi eksemplari ja funktsiooni set_a(), et määrata muutujale a väärtus 20.
  19. Mõne teksti trükkimine konsooli muutuja a väärtuse kõrvale. Muutuja a väärtus saadakse funktsiooni get_a() kutsumisega.
  20. Programm peab pärast edukat lõpetamist tagastama väärtuse.
  21. Funktsiooni main() keha lõpp.

Kaitstud liikmed paiknevad privaatse ja avaliku vahel, lisades ühe olulise pärimisvõimaluse.

Mis on kaitstud klass?

Kaitstuks märgitud klassi liikmetel on eelised privaatseks märgitute ees. Neile pääseb juurde nende määratluse klassi kuuluvate funktsioonide kaudu. Lisaks pääseb neile juurde tuletatud klassidest.

Näiteks 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;
}

Väljund:

C++ kaitstud klassi liikme näite 3 väljund

Siin on koodi ekraanipilt:

C++ kaitstud klassi pärimise näide 3 kood

Code Selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
  2. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega ParentClass.
  4. Kasutage kaitstud juurdepääsu modifikaatorit, et märkida loodava klassi liige kaitstuks.
  5. Looge täisarvuline muutuja nimega väärtus.
  6. Klassi keha lõpp.
  7. Looge uus klass nimega ChildClass, mis pärib ParentClassi.
  8. Kasutage kaitstud juurdepääsu modifikaatorit, et märkida loodava klassi liige alamklassidele juurdepääsetavaks.
  9. Looge funktsioon nimega setId(), mis võtab ühe täisarvu väärtuse x.
  10. Muutuja x väärtuse omistamine muutuja väärtusele.
  11. Funktsiooni setId() definitsiooni lõpp.
  12. Looge funktsioon nimega displayValue().
  13. Printige konsoolile koos muu tekstiga muutuja nimega väärtus väärtus.
  14. Funktsiooni displayValue() põhiosa lõpp.
  15. Klassi kehaosa lõpp nimega ChildClass.
  16. Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
  17. Looge ChildClassi eksemplar ja andke sellele nimi c.
  18. Kasutage ülaltoodud klassi eksemplari ja funktsiooni setId(), et määrata muutujale x väärtus 21.
  19. Kasutage ülaltoodud klassi eksemplari funktsiooni displayValue() kutsumiseks.
  20. Programm peab pärast edukat lõpetamist tagastama väärtuse.
  21. Funktsiooni main() keha lõpp.

Lisaks andmete salvestamisele rühmitab klass ka funktsioone, mis nende andmetega töötavad.

Klassiliikme funktsioonid

Funktsioonid aitavad meil andmetega manipuleerida. Klassiliikme funktsioone saab defineerida kahel viisil:

  • Klassi määratluse sees
  • Väljaspool klassi määratlust

Kui funktsioon tuleb määratleda väljaspool klassimääratlust, peame kasutama ulatuse eraldusvõime operaatorit (::). Sellele tuleks lisada klasside ja funktsioonide nimed.

Näiteks 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;
}

Väljund:

C++ klassi liikmefunktsioonid Näide 4 väljund

Siin on koodi ekraanipilt:

C++ klassi liikmefunktsioonid Näide 4 kood

Code Selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie programmi iostreami päisefail.
  2. Selle funktsioonide kasutamiseks lisage meie programmi stringi päise fail.
  3. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  4. Looge klass nimega Guru99.
  5. Kasutage avaliku juurdepääsu modifikaatorit, et märkida loodavad klassiliikmed avalikult ligipääsetavateks.
  6. Looge stringi muutuja nimega õpetuse_nimi.
  7. Looge täisarvuline muutuja nimega id.
  8. Looge funktsioon nimega printname(). Seda funktsiooni ei ole klassimääratluses määratletud.
  9. Loo funktsioon nimega printid(). See funktsioon on defineeritud klassi definitsioonis. Selle sisu on lisatud klassi definitsiooni.
  10. Printige muutuja id väärtus koos muu konsooli tekstiga. Pange tähele, et see on lisatud funktsiooni printid() kehasse. See käivitatakse ainult funktsiooni printid() väljakutsumisel.
  11. Funktsiooni printid() keha lõpp.
  12. Klassi sisu lõpp Guru99.
  13. Funktsiooni printname() määratluse algus.
  14. Printige konsoolile koos muu tekstiga muutuja tutorial_name väärtus. Pange tähele, et see on lisatud funktsiooni printname() kehasse. See käivitatakse ainult funktsiooni printname() väljakutsumisel.
  15. Funktsiooni printname() definitsiooni lõpp.
  16. Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
  17. Loo klassi eksemplar Guru99 ja andes sellele nimeks guru99.
  18. Kasutage ülaltoodud eksemplari väärtuse määramiseks C++ muutujale tutorial_name.
  19. Kasutage guru99 eksemplari, et määrata muutujale id väärtus 1001.
  20. Funktsiooni printname() kutsumiseks kasutage eksemplari guru99.
  21. Konsoolile uue tühja rea ​​printimiseks helistage käsule end (end line).
  22. Funktsiooni printid() kutsumiseks kasutage eksemplari guru99.
  23. Programm peab pärast edukat lõpetamist tagastama väärtuse.
  24. Funktsiooni main() keha lõpp.

Objekti loomisel ja hävitamisel käivituvad automaatselt kaks spetsiaalset liikmesfunktsiooni.

Konstruktorid ja hävitajad

Mis on konstruktor?

Konstruktorid on spetsiaalsed funktsioonid, mis initsialiseerivad objekte. C++ koostajad Objekti loomisel kutsutakse välja konstruktor. Konstruktorid aitavad klassi liikmetele väärtusi määrata. Loomulikult toimub see pärast seda, kui neile on eraldatud mäluruumi.

Mis on destruktor?

Destruktorid seevastu aitavad hävitada klassiobjekte.

Konstruktori nimi peab olema klassi nimega sarnane. Konstruktoril ei ole tagastustüüpi.

Konstruktorit saab määratleda klassi keha sees või väljaspool. Kui see on määratletud väljaspool klassi keha, tuleks see määratleda klassi nime ja ulatuse eraldusoperaatoriga (::).

Näiteks 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; 
		}   
}

Väljund:

C++ konstruktori ja destruktori näide 5 väljund

Siin on koodi ekraanipilt:

C++ konstruktori ja destruktori näide 5 kood

Code Selgitus:

  1. Selle funktsioonide kasutamiseks lisage koodi iostreami päisefail.
  2. Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega ClassA.
  4. Kasutage avaliku juurdepääsu modifikaatorit, et märkida liige, mida loome, avalikult juurdepääsetavaks.
  5. Loo klassi jaoks konstruktor.
  6. Tekst, mis prinditakse konsoolile, kui kutsutakse konstruktor. Endl on a C++ märksõna, mis tähendab lõpprida. See viib hiirekursori järgmisele reale.
  7. Klassi konstruktori keha lõpp.
  8. Looge klassi jaoks hävitaja.
  9. Destrutori kutsumisel konsoolile prinditav tekst. Endl on a C++ märksõna, mis tähendab lõpprida. See viib hiirekursori järgmisele reale.
  10. Destruktori kere ots.
  11. Klassi keha lõpp.
  12. Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
  13. Loo klassi objekt ja pane sellele nimi a. Kutsutakse ehitaja.
  14. Looge täisarvuline muutuja nimega p ja määrake sellele väärtus 1.
  15. Loo if-lause plokk, kasutades muutujat p.
  16. Loo klassi objekt ja pane sellele nimi b. Hävitaja kutsutakse.
  17. Kui-lause põhiosa lõpp.
  18. Funktsiooni main() keha lõpp.

KKK

Klass on kasutaja määratletud plaan, mis koondab andmeliikmed ja liikmefunktsioonid ühte tüüpi. Objekt on sellest klassist loodud konkreetne eksemplar, mis sisaldab oma koopiat plaanses kirjeldatud andmetest.

Peamine erinevus seisneb vaikimisi ligipääsus: klassi liikmed on vaikimisi privaatsed, samas kui klassi liikmed on privaatsed. struktuur on vaikimisi avalikud. Mõlemad toetavad pärimist, konstruktorit ja kapseldamist C++.

C++ toetab kolme levinud konstruktoritüüpi: argumentideta vaikekonstruktorit, parameetritega konstruktorit, mis aktsepteerib väärtusi liikmete initsialiseerimiseks, ja koopiakonstruktorit, mis loob uue objekti sama klassi olemasolevast objektist.

Sõbrafunktsioon on mitteliikmefunktsioon, millel on juurdepääs klassi privaatsetele ja kaitstud liikmetele. See deklareeritakse klassi sees märksõnaga „sõber“, kuid defineeritakse väljaspool seda nagu tavaline funktsioon.

See pointer on iga mittestaatilise liikmefunktsiooni sees olev kaudne pointer. See osutab objektile, mis funktsiooni käivitas, võimaldades koodil viidata selle objekti enda liikmetele ja lahendada parameetrite ja andmeliikmete nimekonflikte.

Kapseldamine koondab andmed ja nende peal töötavad funktsioonid ühte klassi ning peidab seejärel sisemised üksikasjad privaatsete liikmefunktsioonide abil. Avalikud liikmefunktsioonid avaldavad kontrollitud liidese, kaitstes andmeid juhusliku või volitamata juurdepääsu eest.

Jah. Tehisintellektil põhinevad kodeerimisassistendid muudavad lühikese käsuviiba või kommentaari tööklassi definitsioonideks, mis sisaldavad andmeliikmeid, juurdepääsuspetsifikatsioone, konstruktoreid ja liikmefunktsioone. Enne koodi kompileerimist vaadake alati üle genereeritud juurdepääsutasemed ja initsialiseerimisloogika.

Jah. GitHubi koopia soovitab tippimise ajal klassideklaratsioone, konstruktoreid, gettereid ja settereid. See saab korduvate mallidega kiiresti hakkama, kuigi enne ehitamist peaksite siiski kontrollima liikmete juurdepääsu, konstruktori loogikat ja objektide kasutamist.

Võta see postitus kokku järgmiselt: