C++ Osztály és objektum példával

Mi az az osztály?

A C++ osztály egyesíti az adatokat és az adatok manipulálására szolgáló módszereket egybe. Az osztályok meghatározzák az objektumok formáit is. Az osztályokban található adatokat és metódusokat osztálytagoknak nevezzük. Az osztály egy felhasználó által meghatározott adattípus. Az osztály tagjainak eléréséhez az osztály egy példányát használjuk. Egy osztályt egy objektum tervrajzaként láthat.

Egy osztály lehet egy ház prototípusa. Megmutatja az ajtók, ablakok, padlók stb. elhelyezkedését és méretét. Ezekből a leírásokból házat építhetünk. A ház lesz a tárgy. A prototípusból sok házat lehet létrehozni. Ezenkívül sok objektumot is létrehozhat egy osztályból.

C++ Osztály

A fenti ábrán egyetlen ház prototípusa van. Ebből a prototípusból két különböző tulajdonságú házat hoztunk létre.

Osztálynyilatkozat

A C+ nyelven egy osztályt a class kulcsszó segítségével határozunk meg. Ezt az osztály nevének kell követnie. Ezután az osztálytörzs a kapcsos zárójelek közé kerül { }.

Szintaxis

class class-name
   {
   // data
   // functions
   };
  • Az osztálynév az osztályhoz rendelendő név.
  • Az adatok az osztály adatai, általában változóként deklarálva.
  • A függvények az osztályfüggvények.

Privát és nyilvános kulcsszavak

Biztosan találkoztál ezzel a két kulcsszóval. Ezek hozzáférésmódosítók.

  • Magán:

Ha a privát kulcsszót egy függvény vagy osztály definiálására használják, az privát kulcsszóvá válik. Ezek csak az osztályon belülről érhetők el.

  • Nyilvános:

A nyilvános kulcsszó viszont nyilvánossá teszi az adatokat/funkciókat. Ezek az osztályon kívülről is elérhetők.

Objektum meghatározása

Az objektumok osztályokból jönnek létre. Az osztályobjektumok deklarálása hasonló módon történik, mint a változók deklarálása. Az osztály nevének kezdődnie kell, majd az objektum nevének. Az osztálytípus objektuma.

Szintaxis

class-name object-name;
  • Az osztálynév annak az osztálynak a neve, amelyből objektumot kell létrehozni.
  • Az objektumnév az új objektumhoz hozzárendelendő név.

Az objektum osztályból történő létrehozásának ezt a folyamatát példányosításnak nevezik.

Adattagok elérése

Egy osztály nyilvános tagjainak eléréséhez a (.)dot operátort használjuk. Ezek nyilvános hozzáférés módosítóval jelölt tagok.

Példa 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;
}

output:

Adattagok elérése

Itt van egy képernyőkép a kódról:

Adattagok elérése

Kód Magyarázat:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Az std névtér belefoglalása a kódunkba, hogy az osztályait hívás nélkül használhassuk.
  3. Nyilatkozz egy Telefon nevű osztályt.
  4. A nyilvános hozzáférés módosító használatával nyilvánosan hozzáférhetőként jelöljük meg a létrehozandó változókat.
  5. A kettős adattípus változó költségének deklarálása.
  6. Deklaráljon egy slot nevű egész változót.
  7. Az osztálytörzs vége.
  8. A main() függvény meghívása. A program logikáját hozzá kell adni a törzséhez.
  9. Hozzon létre egy Y6 nevű objektumot Telefon típusú. Ezt példányosításnak hívják.
  10. Hozzon létre egy Y7 nevű objektumot Telefon típusú. Ezt példányosításnak hívják.
  11. Az Y6 objektum segítségével érheti el a Telefon osztály változó/tagköltségét. Az érték 100.0. Az Y6 költsége most 100.0-ra van állítva.
  12. Az Y6 objektum használatával érheti el a Telefon osztály változó/taghelyeit. Az érték 2-re van állítva. Az Y6 slotja most 2-re van állítva.
  13. Az Y7 objektum segítségével érheti el a Telefon osztály változó/tagköltségét. Az érték 200.0. Az Y7 költsége most 200.0-ra van állítva.
  14. Az Y7 objektum használatával érheti el a Telefon osztály változó/taghelyeit. Az érték 2-re van állítva. Az Y7 slotja most 2-re van állítva.
  15. Nyomtassa ki az Y6 költségét a konzolon a többi szöveg mellé.
  16. Nyomtassa ki az Y7 költségét a konzolon a többi szöveg mellé.
  17. Nyomtassa ki az Y6 helyeinek számát a többi szöveg mellé.
  18. Nyomtassa ki az Y7 helyeinek számát a többi szöveg mellé.
  19. A programnak értéket kell visszaadnia a sikeres befejezés után.
  20. A main() függvény törzsének vége.

Mi az a magánosztály?

A privátként megjelölt osztálytagok csak az osztályon belül definiált függvényekkel érhetők el. Az osztályon kívül meghatározott objektumok vagy függvények nem férhetnek hozzá közvetlenül ezekhez a tagokhoz. A privát osztály tagjait csak a tag és a barát funkciók érhetik el.

Mi az a védett osztály?

A védettként megjelölt osztálytagok előnyt élveznek a privátként megjelöltekkel szemben. A definíciójuk szerinti osztályon belüli függvényekkel érhetők el. Ezenkívül származtatott osztályokból is elérhetők.

Példa 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;
}

output:

Adattagok elérése

Itt van egy képernyőkép a kódról:

Adattagok elérése

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy osztályt ClassA néven.
  4. A nyilvános hozzáférés módosító segítségével jelölje meg a létrehozandó osztálytagot nyilvánosan elérhetőként.
  5. Hozzuk létre a set_a() nevű függvényt, amely egy val egész számot vesz fel.
  6. Hozzon létre egy get_a() függvényt.
  7. A privát hozzáférés módosító segítségével jelölje meg a létrehozandó osztálytagot privátként elérhetőként.
  8. Deklaráljunk egy a nevű egész változót.
  9. Az osztálytörzs vége.
  10. Használja az osztály nevét és a hatókör felbontási operátorát a get_a() függvény eléréséhez. Meg akarjuk határozni, hogy a függvény mit csinál, amikor meghívják.
  11. A get_a() függvénynek az a változó értékét kell visszaadnia meghívásakor.
  12. A get_a() függvény definíciójának vége.
  13. Használja az osztály nevét és a hatókör felbontási operátorát a set_a() függvény eléréséhez. Meg akarjuk határozni, hogy a függvény mit csinál, amikor meghívják.
  14. A val változó értékének hozzárendelése a változóhoz.
  15. A set_a() függvény definíciójának vége.
  16. Hívja meg a main() függvényt. A program logikáját hozzá kell adni a függvény törzséhez.
  17. Hozzon létre egy ClassA példányt, és adja meg a nevet.
  18. Használja a fenti osztálypéldányt és a set_a() függvényt, hogy 20-as értéket rendeljen az a változóhoz.
  19. Szöveg nyomtatása az a változó értéke mellett a konzolon. Az a változó értékét a get_a() függvény meghívásával kapjuk meg.
  20. A programnak értéket kell visszaadnia a sikeres befejezés után.
  21. A main() függvény törzsének vége.

Példa 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;
}

output:

Adattagok elérése

Itt van egy képernyőkép a kódról:

Adattagok elérése

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódunkba a funkcióinak használatához.
  2. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy ParentClass nevű osztályt.
  4. A védett hozzáférés módosítóval jelölje meg védettként a létrehozandó osztálytagot.
  5. Hozzon létre egy érték nevű egész változót.
  6. Az osztálytörzs vége.
  7. Hozzon létre egy ChildClass nevű új osztályt, amely örökli a ParentClass-t.
  8. A védett hozzáférés módosítóval jelölje meg a létrehozandó osztálytagot az utódosztályok számára elérhetőként.
  9. Hozzuk létre a setId() nevű függvényt, amely egy x egész számot vesz fel.
  10. Az x változó értékének hozzárendelése a változó értékéhez.
  11. A setId() függvény definíciójának vége.
  12. Hozzon létre egy displayValue() nevű függvényt.
  13. Nyomtassa ki az érték nevű változó értékét a konzolon a többi szöveg mellé.
  14. A displayValue() függvény törzsének vége.
  15. A ChildClass nevű osztály törzsének vége.
  16. Hívja meg a main() függvényt. A program logikáját hozzá kell adni a függvény törzséhez.
  17. Hozzon létre egy ChildClass példányt, és adja meg a nevet c.
  18. Használja a fenti osztálypéldányt és a setId() függvényt, hogy 21 értéket rendeljen az x változóhoz.
  19. A fenti osztálypéldány segítségével hívja meg a displayValue() nevű függvényt.
  20. A programnak értéket kell visszaadnia a sikeres befejezés után.
  21. A main() függvény törzsének vége.

Osztálytag funkciók

A funkciók segítenek az adatok kezelésében. Az osztálytagfüggvények kétféleképpen definiálhatók:

  • Az osztálydefiníción belül
  • Az osztálydefiníción kívül

Ha egy függvényt osztálydefiníción kívül kell definiálni, akkor a hatókör felbontási operátort (::) kell használnunk. Ehhez csatolni kell az osztály- és függvényneveket.

Példa 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;
}

output:

Osztálytag funkciók

Itt van egy képernyőkép a kódról:

Osztálytag funkciók

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a programunkba a funkcióinak használatához.
  2. Szerelje be programunkba a string fejléc fájlt, hogy használni tudja a funkcióit.
  3. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  4. Hozz létre egy osztályt Guru99 néven.
  5. A nyilvános hozzáférés módosító használatával jelölje meg nyilvánosan elérhetőként azokat az osztálytagokat, amelyeket létrehozni készülünk.
  6. Hozzon létre egy tutorial_name nevű karakterlánc-változót.
  7. Hozzon létre egy id nevű egész változót.
  8. Hozzon létre egy printname() nevű függvényt. Ez a függvény nincs megadva az osztálydefinícióban.
  9. Hozzon létre egy printed() nevű függvényt. Ez a függvény az osztálydefiníción belül van definiálva. A törzse bekerült az osztálydefinícióba.
  10. Nyomtassa ki az id változó értékét a konzolon lévő egyéb szövegek mellé. Megjegyzés: ez a printid() függvény törzsébe került. Csak a printid() függvény meghívásakor kerül végrehajtásra.
  11. A printid() függvény törzsének vége.
  12. A Guru99 osztály törzsének vége.
  13. A printname() függvény definíciójának kezdete.
  14. Nyomtassa ki a tutorial_name változó értékét a konzolon a többi szöveg mellé. Megjegyzés: ez a printname() függvény törzsébe került. Csak a printname() függvény meghívásakor kerül végrehajtásra.
  15. A printname() függvény definíciójának vége.
  16. Hívja meg a main() függvényt. A program logikáját hozzá kell adni a függvény törzséhez.
  17. Hozzon létre egy példányt a Guru99 osztályból, és adja meg a guru99 nevet.
  18. Használja a fenti példányt az érték hozzárendeléséhez C++ a tutorial_name változóhoz.
  19. Használja a guru99 példányt, hogy 1001 értéket rendeljen az id változóhoz.
  20. Használja a guru99 példányt a printname() függvény meghívásához.
  21. Hívja az end (end line) parancsot új üres sor nyomtatásához a konzolon.
  22. Használja a guru99 példányt a printid() függvény meghívásához.
  23. A programnak értéket kell visszaadnia a sikeres befejezés után.
  24. A main() függvény törzsének vége.

Konstruktorok és Destruktorok

Mi az a konstruktorok?

A konstrukciók olyan speciális függvények, amelyek inicializálják az objektumokat. A C++ fordítóprogramok objektum létrehozásakor meghív egy konstruktort. A konstruktorok segítenek értékeket rendelni az osztálytagokhoz. Természetesen ez azután történik, hogy lefoglaltak egy kis memóriaterületet.

Mi az a Destructors?

A destruktorok viszont segítenek az osztályobjektumok megsemmisítésében.

A konstruktor nevének hasonlónak kell lennie az osztály nevéhez. A konstruktoroknak nincs visszatérési típusa.

A konstruktor definiálható az osztálytörzsön belül vagy kívül. Ha az osztálytörzsön kívül van megadva, akkor az osztálynévvel és a hatókör-feloldó operátorral (::) kell megadni.

Példa 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; 
		}   
}

output:

Konstruktorok és Destruktorok

Itt van egy képernyőkép a kódról:

Konstruktorok és Destruktorok

Kód magyarázata:

  1. Szerelje be az iostream fejlécfájlt a kódba a funkcióinak használatához.
  2. Szerelje be az std névteret a kódunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy osztályt ClassA néven.
  4. A nyilvános hozzáférés módosító segítségével jelölje meg nyilvánosan elérhetőként a létrehozandó tagot.
  5. Hozzon létre egy konstruktort az osztályhoz.
  6. A konstruktor meghívásakor a konzolra nyomtatandó szöveg. A endl egy C++ kulcsszó, ami végsort jelent. Az egérkurzort a következő sorra mozgatja.
  7. Az osztálykonstruktor törzsének vége.
  8. Hozzon létre egy destruktort az osztály számára.
  9. A destruktor meghívásakor a konzolra nyomtatandó szöveg. A endl egy C++ kulcsszó, ami végsort jelent. Az egérkurzort a következő sorra mozgatja.
  10. A romboló testének vége.
  11. Az osztálytörzs vége.
  12. Hívja meg a main() függvényt. A program logikáját hozzá kell adni a függvény törzséhez.
  13. Hozzon létre egy osztályobjektumot, és adja meg a nevet a. A kivitelezőt hívják.
  14. Hozzon létre egy p nevű egész változót, és rendeljen hozzá 1 értéket.
  15. Hozzon létre egy if utasításblokkot a p változó használatával.
  16. Hozzon létre egy osztályobjektumot, és adja meg a nevet b. A pusztítót hívják.
  17. Az if utasítás törzsének vége.
  18. A main() függvény törzsének vége.

Összegzésként

  • C++ objektumorientált.
  • Az osztályok képezik a fő jellemzőit C++ amelyek objektum-orientálttá teszik.
  • A C++ osztály egyesíti az adatokat és az adatok manipulálására szolgáló módszereket egybe.
  • Az osztály egy objektum tervrajza.
  • Az osztályok határozzák meg az objektum formáját.
  • Az osztályokban található adatokat és metódusokat osztálytagoknak nevezzük.
  • Az osztály tagjainak eléréséhez az osztály egy példányát kell használnia.
  • Osztály létrehozásához a class kulcsszót használjuk.
  • Az osztálytagfüggvények definiálhatók egy osztályon belül vagy kívül.