C++ Klass ja objekt koos näitega

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 on maja prototüüp. See näitab uste, akende, põrandate jms asukohta ja suurusi. Nende kirjelduste põhjal saame ehitada maja. Maja muutub objektiks. Prototüübist on võimalik luua palju maju. Samuti on klassist võimalik luua palju objekte.

C++ klass

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

Klassi deklaratsioon

C+ keeles määratletakse klass klassi märksõna abil. Sellele peaks järgnema klassi nimi. Klassi keha lisatakse seejärel lokkis sulgude { } 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.

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.

Objekti määratlus

Objektid luuakse klassidest. Klassiobjekte deklareeritakse samamoodi nagu muutujaid. Klassi nimi peab algama ja sellele järgnema objekti nimi. Klassitüübi objekt.

Süntaks

class-name object-name;
  • Klassinimi on selle klassi nimi, millest objekt luuakse.
  • Objekti nimi on uuele objektile omistatav nimi.

Seda klassist objekti loomise protsessi nimetatakse instantseerimiseks.

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:

Juurdepääs andmete liikmetele

Siin on koodi ekraanipilt:

Juurdepääs andmete liikmetele

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

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.

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

Juurdepääs andmete liikmetele

Siin on koodi ekraanipilt:

Juurdepääs andmete liikmetele

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

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:

Juurdepääs andmete liikmetele

Siin on koodi ekraanipilt:

Juurdepääs andmete liikmetele

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

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 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;
}

Väljund:

Klassiliikme funktsioonid

Siin on koodi ekraanipilt:

Klassiliikme funktsioonid

Koodi 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 need klassi liikmed, mida loome, avalikult juurdepää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. Looge funktsioon nimega printed(). See funktsioon on määratletud klassi määratluses. Selle keha on lisatud klassi määratlusesse.
  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. Guru99 klassi keha lõpp.
  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. Looge klassi Guru99 eksemplar ja andke sellele nimi 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.

Konstruktorid ja hävitajad

Mis on konstruktorid?

Konstruktsioonid on erifunktsioonid, mis initsialiseerivad objekte. The C++ koostajad kutsub objekti loomisel konstruktori. Konstruktorid aitavad klassiliikmetele väärtusi määrata. Seda muidugi pärast seda, kui neile on eraldatud mäluruumi.

Mis on hävitajad?

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 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; 
		}   
}

Väljund:

Konstruktorid ja hävitajad

Siin on koodi ekraanipilt:

Konstruktorid ja hävitajad

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

kokkuvõte

  • C++ on objektorienteeritud.
  • Klassid moodustavad põhijooned C++ mis muudavad selle objektorienteeritud.
  • A C++ klass ühendab andmed ja meetodid andmetega manipuleerimiseks üheks.
  • Klass on objekti plaan.
  • Klassid määravad objekti kuju.
  • Klassis sisalduvaid andmeid ja meetodeid nimetatakse klassiliikmeteks.
  • Klassi liikmetele juurdepääsu saamiseks peaksite kasutama klassi eksemplari.
  • Klassi loomiseks kasutame klassi märksõna.
  • Klassiliikme funktsioone saab määratleda klassi sees või väljaspool seda.