C++ Luokka ja objekti esimerkin kanssa

⚡ Älykäs yhteenveto

Luokat ja objektit C++ muodostavat olio-ohjelmoinnin perustan, jossa luokka määrittelee datan ja jäsenfunktioiden suunnitelman ja objekti on tästä suunnitelmasta luotu konkreettinen instanssi.

  • 🔷 Luokan piirustus: A C++ luokka niputtaa datan jäsenet ja jäsenfunktiot yhdeksi käyttäjän määrittämäksi tyypiksi.
  • 🔑 Käyttöoikeusmuokkaajat: Avainsanat private, public ja protected määrittävät, mistä luokan jäseniin voi päästä käsiksi.
  • 🧱 Objektin instanssi: Objekti luodaan luokasta käyttämällä syntaksia luokan-nimi objektin-nimi.
  • ???? Jäsenten pääsy: Pisteoperaattori tavoittaa julkiset jäsenet, kun taas jäsenfunktiot käsittelevät tallennettua dataa.
  • ⚙️ Rakentajat: Konstruktorit alustavat objektit automaattisesti, ja destruktorit vapauttavat ne, kun ne menevät laajuuden ulkopuolelle.
  • 🤖 AI-apu: GitHub Copilot ja vastaavat tekoälyavustajat luovat lyhyestä kommentista tukirakenteita luokkien määritelmille ja rakentajille.

C++ Luokka ja objekti

Mikä on luokka?

A C++ luokka yhdistää tiedot ja menetelmät tietojen käsittelemiseksi yhdeksi. Luokat määräävät myös objektien muodot. Luokkaan sisältyvät tiedot ja menetelmät tunnetaan luokan jäseninä. Luokka on käyttäjän määrittämä tietotyyppi. Käyttääksemme luokan jäseniä käytämme luokan esiintymää. Voit nähdä luokan objektin suunnitelmana.

Luokka voi olla talon prototyyppi. Se näyttää ovien, ikkunoiden, lattioiden jne. sijainnin ja koot. Näiden kuvausten perusteella voimme rakentaa talon. Talosta tulee objekti. Prototyypistä on mahdollista luoda useita taloja. Luokasta on myös mahdollista luoda useita objekteja.

C++ luokka objektien piirustuksena

Yllä olevassa kuvassa meillä on yhden talon prototyyppi. Tästä prototyypistä olemme luoneet kaksi taloa, joissa on erilaisia ​​ominaisuuksia.

Kun ajatellaan luokkaa suunnitelmana, seuraava vaihe on nähdä, miten se deklaroidaan koodissa.

Luokkailmoitus

In C++, luokka määritellään avainsanalla class. Tämän perään tulee luokan nimi. Luokan runko lisätään sitten aaltosulkeiden { } väliin.

Syntaksi

class class-name
   {
   // data
   // functions
   };
  • luokan nimi on luokalle annettava nimi.
  • tiedot on luokan data, joka yleensä deklaroidaan muuttujina.
  • tehtävät ovat luokkafunktioita.

Luokan nimen ja rungon määrittäminen herättää luonnollisesti kysymyksen siitä, kuka voi käyttää kutakin jäsentä.

Yksityiset ja julkiset avainsanat

Olet varmaan törmännyt näihin kahteen avainsanaan. Ne ovat pääsyn muokkaajia.

yksityinen:

Kun yksityistä avainsanaa käytetään funktion tai luokan määrittämiseen, siitä tulee yksityinen. Sellaiset ovat käytettävissä vain luokasta käsin.

Julkinen:

Julkinen avainsana puolestaan ​​tekee tiedoista/funktioista julkisia. Näihin pääsee käsiksi luokan ulkopuolelta.

Kun luokka on luotu, siitä voidaan luoda olioita, aivan kuten muuttujia luodaan tietotyypistä.

Objektin määritelmä

Objektit luodaan luokista. Luokkaobjektit deklaroidaan samalla tavalla kuin muuttujat. Luokan nimen on oltava ensin ja sen jälkeen objektin nimi. Objekti on luokkatyyppiä.

Syntaksi

class-name object-name;
  • luokan nimi on sen luokan nimi, josta objekti luodaan.
  • objektin nimi on uudelle objektille annettava nimi.

Tätä objektin luomisprosessia luokasta kutsutaan instanssiksi.

Kun objekti on luotu, sen julkisiin jäseniin voidaan tavoittaa suoraan yksinkertaisen operaattorin avulla.

Tietojen jäsenten käyttö

Luokan julkisiin jäseniin pääsemiseksi käytämme (.)piste-operaattoria. Nämä ovat jäseniä, jotka on merkitty julkisen käyttöoikeuden muokkaajalla.

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

lähtö:

C++ julkisten tietojen jäsenten käyttäminen Esimerkki 1 tuloste

Tässä on kuvakaappaus koodista:

C++ julkisten tietojen jäsenten käyttö Esimerkki 1 koodi

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme, jotta voit käyttää sen toimintoja.
  2. std-nimiavaruuden sisällyttäminen koodiimme käyttääksemme sen luokkia kutsumatta sitä.
  3. Ilmoita luokka nimeltä Puhelin.
  4. Julkisen käyttöoikeuden muokkaimen käyttäminen merkitsemään muuttujat, joita olemme luomassa, julkisesti saatavilla oleviksi.
  5. Ilmoita kaksoistietotyypin muuttuvat kustannukset.
  6. Ilmoita kokonaislukumuuttuja nimeltä slots.
  7. Luokan rungon loppu.
  8. Main()-funktion kutsuminen. Ohjelmalogiikka tulisi lisätä sen runkoon.
  9. Luo objekti nimeltä Y6, jonka tyyppi on Puhelin. Tätä kutsutaan instantiaatioksi.
  10. Luo objekti nimeltä Y7, jonka tyyppi on Puhelin. Tätä kutsutaan instantiaatioksi.
  11. Pääset luokan Puhelin muuttuja-/jäsenkustannuksiin objektilla Y6. Arvoksi on asetettu 100.0. Y6:n hinta on nyt 100.0.
  12. Siirry luokan Puhelin muuttuja-/jäsenpaikkoihin objektin Y6 avulla. Arvoksi on asetettu 2. Y6:n paikat on nyt asetettu arvoon 2.
  13. Pääset luokan Puhelin muuttuja-/jäsenkustannuksiin objektilla Y7. Arvoksi on asetettu 200.0. Y7:n hinta on nyt 200.0.
  14. Siirry luokan Puhelin muuttuja-/jäsenpaikkoihin objektin Y7 avulla. Arvoksi on asetettu 2. Y7:n paikat on nyt asetettu arvoon 2.
  15. Tulosta Y6:n hinta konsoliin muun tekstin viereen.
  16. Tulosta Y7:n hinta konsoliin muun tekstin viereen.
  17. Tulosta Y6-paikkojen määrä muun tekstin viereen.
  18. Tulosta Y7-paikkojen määrä muun tekstin viereen.
  19. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  20. Main()-funktion rungon loppu.

Julkiset jäsenet ovat avoimia ulkopuoliselle koodille, mutta yksityiset jäsenet noudattavat paljon tiukempia käyttöoikeussääntöjä.

Mikä on yksityinen luokka?

Yksityisiksi merkittyjä luokan jäseniä voi käyttää vain luokassa määritellyillä toiminnoilla. Mikään luokan ulkopuolella määritelty objekti tai funktio ei voi käyttää tällaisia ​​jäseniä suoraan. Yksityisen luokan jäseneen pääsee vain jäsen- ja ystävätoimintojen kautta.

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

lähtö:

C++ yksityisen luokan jäsenen esimerkki 2 tuloste

Tässä on kuvakaappaus koodista:

C++ yksityisen luokan jäsenen esimerkki 2 koodi

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  2. Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
  3. Luo luokka nimeltä ClassA.
  4. Käytä julkisen käyttöoikeuden muokkaajaa merkitäksesi luotava luokan jäsen julkisesti käytettäväksi.
  5. Luo funktio nimeltä set_a(), joka ottaa yhden kokonaisluvun arvon val.
  6. Luo funktio nimeltä get_a().
  7. Käytä yksityisen käyttöoikeuden muokkaajaa merkitäksesi luotava luokan jäsen yksityisesti käytettävissä olevaksi.
  8. Ilmoita kokonaislukumuuttuja nimeltä a.
  9. Luokan rungon loppu.
  10. Käytä luokan nimeä ja laajuuden resoluutiooperaattoria päästäksesi funktioon get_a(). Haluamme määrittää, mitä toiminto tekee, kun sitä kutsutaan.
  11. Funktio get_a() palauttaa muuttujan a arvon, kun sitä kutsutaan.
  12. Funktion get_a() määritelmän loppu.
  13. Käytä luokan nimeä ja laajuuden resoluutiooperaattoria päästäksesi funktioon set_a(). Haluamme määrittää, mitä toiminto tekee, kun sitä kutsutaan.
  14. Muuttujan val arvon antaminen muuttujalle a.
  15. Funktion set_a() määritelmän loppu.
  16. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  17. Luo ClassA esiintymä ja anna sille nimi a.
  18. Käytä yllä olevaa luokkainstanssia ja funktiota set_a() määrittääksesi muuttujalle a arvon 20.
  19. Tulostetaan tekstiä konsoliin muuttujan a arvon rinnalle. Muuttujan a arvo saadaan kutsumalla get_a()-funktiota.
  20. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  21. Funktion main() rungon loppu.

Suojatut jäsenet sijaitsevat yksityisen ja julkisen välissä, mikä lisää yhden keskeisen periytymisominaisuuden.

Mikä on suojattu luokka?

Suojatuiksi merkityillä luokan jäsenillä on etuoikeus yksityisiksi merkittyihin verrattuna. Niitä voidaan käyttää määritellyn luokan funktioilla. Lisäksi niihin pääsee käsiksi johdetuista luokista.

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

lähtö:

C++ suojatun luokan jäsenen esimerkin 3 tuloste

Tässä on kuvakaappaus koodista:

C++ suojatun luokan periytyminen Esimerkki 3 koodi

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  2. Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
  3. Luo luokka nimeltä ParentClass.
  4. Käytä suojatun käyttöoikeuden muokkaajaa merkitäksesi luotava luokan jäsen suojatuksi.
  5. Luo kokonaislukumuuttuja nimeltä arvo.
  6. Luokan rungon loppu.
  7. Luo uusi luokka nimeltä ChildClass, joka perii ParentClassin.
  8. Käytä suojatun käyttöoikeuden muokkaajaa merkitäksesi luotava luokan jäsen lapsiluokkien käytettäväksi.
  9. Luo funktio nimeltä setId(), joka ottaa yhden kokonaisluvun arvon x.
  10. Muuttujan x arvon määrittäminen muuttujan arvoon.
  11. Funktion setId() määritelmän loppu.
  12. Luo funktio nimeltä displayValue().
  13. Tulosta muuttujan arvo nimetty arvo konsoliin muun tekstin rinnalle.
  14. Funktion displayValue() rungon loppu.
  15. Luokan rungon loppu nimeltä ChildClass.
  16. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  17. Luo ChildClass-esiintymä ja anna sille nimi c.
  18. Käytä yllä olevaa luokkaesiintymää ja funktiota setId() määrittääksesi muuttujalle x arvon 21.
  19. Käytä yllä olevaa luokkaesiintymää kutsuaksesi funktiota nimeltä displayValue().
  20. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  21. Funktion main() rungon loppu.

Tiedon tallentamisen lisäksi luokka ryhmittelee myös funktiot, jotka käsittelevät kyseistä tietoa.

Luokan jäsentoiminnot

Toiminnot auttavat meitä käsittelemään tietoja. Luokan jäsenfunktiot voidaan määrittää kahdella tavalla:

  • Luokan määritelmän sisällä
  • Luokan määritelmän ulkopuolella

Jos funktio halutaan määritellä luokkamäärittelyn ulkopuolella, meidän on käytettävä laajuuden resoluutiooperaattoria (::). Tähän tulee liittää luokan ja funktion nimet.

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

lähtö:

C++ luokan jäsenfunktiot Esimerkki 4 tuloste

Tässä on kuvakaappaus koodista:

C++ luokan jäsenfunktiot Esimerkki 4 koodi

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto ohjelmaamme käyttääksesi sen toimintoja.
  2. Sisällytä merkkijonootsikkotiedosto ohjelmaamme käyttääksesi sen toimintoja.
  3. Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
  4. Luo luokka nimeltä Guru99.
  5. Käytä julkisen käyttöoikeuden muokkaajaa merkitäksesi luomamme luokan jäsenet julkisesti saatavilla oleviksi.
  6. Luo merkkijonomuuttuja nimeltä tutorial_name.
  7. Luo kokonaislukumuuttuja nimeltä id.
  8. Luo funktio nimeltä printname(). Tätä funktiota ei ole määritetty luokan määritelmässä.
  9. Luo funktio nimeltä printid(). Tämä funktio on määritelty luokkamääritelmässä. Sen runko on lisätty luokkamääritelmään.
  10. Tulosta muuttujan id arvo muun tekstin rinnalle konsoliin. Huomaa, että tämä on lisätty printid()-funktion runkoon. Se suoritetaan vain, kun printid()-funktiota kutsutaan.
  11. Funktion printid() rungon loppu.
  12. Kurssin rungon loppu Guru99.
  13. Funktion printname() määrittelyn alku.
  14. Tulosta muuttujan tutorial_name arvo konsoliin muun tekstin rinnalle. Huomaa, että tämä on lisätty printname()-funktion runkoon. Se suoritetaan vain, kun printname()-funktiota kutsutaan.
  15. Tulostusnimi()-funktion määritelmän loppu.
  16. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  17. Luo luokan instanssi Guru99 ja antoi sille nimen guru99.
  18. Käytä yllä olevaa esiintymää arvon määrittämiseen C++ muuttujaan tutorial_name.
  19. Käytä guru99-instanssia määrittääksesi arvon 1001 muuttujalle id.
  20. Käytä ilmentymää guru99 kutsuaksesi funktiota printname() .
  21. Soita end (end line) -komento tulostaaksesi uuden tyhjän rivin konsoliin.
  22. Käytä instanssia guru99 kutsuaksesi funktiota printid().
  23. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  24. Main()-funktion rungon loppu.

Kaksi erityistä jäsenfunktiota suoritetaan automaattisesti, kun objekti luodaan ja kun se tuhotaan.

Rakentajat ja tuhoajat

Mikä on rakentaja?

Konstruktorit ovat erikoisfunktioita, jotka alustavat objekteja. C++ kerääjiä kutsu konstruktoria luodessasi objektia. Konstruktorit auttavat arvojen määrittämisessä luokan jäsenille. Tämä tapahtuu tietenkin sen jälkeen, kun heille on varattu muistitilaa.

Mikä on destruktori?

Destruktorit toisaalta auttavat tuhoamaan luokkaobjekteja.

Rakentajan nimen on oltava samanlainen kuin luokan nimi. Rakentajilla ei ole palautustyyppiä.

Konstruktori voidaan määrittää luokan rungon sisällä tai ulkopuolella. Jos se määritellään luokan rungon ulkopuolella, se tulee määrittää luokan nimellä ja laajuuden resoluutiooperaattorilla (::).

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

lähtö:

C++ konstruktorin ja destruktorin esimerkki 5 tuloste

Tässä on kuvakaappaus koodista:

C++ konstruktorin ja destruktorin esimerkki 5 koodi

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiin käyttääksesi sen toimintoja.
  2. Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
  3. Luo luokka nimeltä ClassA.
  4. Käytä julkisen käyttöoikeuden muokkaajaa merkitäksesi jäsen, jonka olemme luomassa, julkisesti käytettäväksi.
  5. Luo luokalle konstruktori.
  6. Konsoliin tulostettava teksti, kun konstruktoria kutsutaan. Loppu on a C++ avainsana, joka tarkoittaa loppuriviä. Se siirtää hiiren osoittimen seuraavalle riville.
  7. Luokkakonstruktorin rungon loppu.
  8. Luo luokalle tuhoaja.
  9. Konsoliin tulostettava teksti, kun destructoria kutsutaan. Loppu on a C++ avainsana, joka tarkoittaa loppuriviä. Se siirtää hiiren osoittimen seuraavalle riville.
  10. Tuhoajan rungon pää.
  11. Luokan rungon loppu.
  12. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  13. Luo luokkaobjekti ja anna sille nimi a. Rakentaja kutsutaan.
  14. Luo kokonaislukumuuttuja nimeltä p ja anna sille arvo 1.
  15. Luo if-lauselohko käyttämällä muuttujaa p.
  16. Luo luokkaobjekti ja anna sille nimi b. Tuhoaja kutsutaan.
  17. if-lauseen rungon loppu.
  18. Main()-funktion rungon loppu.

UKK

Luokka on käyttäjän määrittämä suunnitelma, joka ryhmittelee datajäsenet ja jäsenfunktiot yhdeksi tyypiksi. Objekti on kyseisestä luokasta rakennettu konkreettinen instanssi, joka sisältää oman kopionsa suunnitelman kuvaamasta datasta.

Tärkein ero on oletusarvoinen käyttöoikeus: luokan jäsenet ovat oletusarvoisesti yksityisiä, kun taas luokan jäsenet rakenne ovat oletusarvoisesti julkisia. Molemmat tukevat periytymistä, konstruktoreita ja kapselointia C++.

C++ tukee kolmea yleistä konstruktorityyppiä: oletuskonstruktoria ilman argumentteja, parametrisoitua konstruktoria, joka hyväksyy arvot jäsenten alustamiseen, ja kopiokonstruktoria, joka luo uuden objektin saman luokan olemassa olevasta objektista.

Friend-funktio on luokan ulkopuolinen funktio, jolle on myönnetty pääsy luokan yksityisiin ja suojattuihin jäseniin. Se esitellään luokan sisällä friend-avainsanalla, mutta määritellään sen ulkopuolella kuten tavallinen funktio.

this-osoitin on implisiittinen osoitin, joka on käytettävissä jokaisessa ei-staattisessa jäsenfunktiossa. Se osoittaa funktion käynnistäneeseen objektiin, jolloin koodi voi viitata kyseisen objektin omiin jäseniin ja ratkaista parametrien ja datajäsenten välisiä nimeämisristiriitoja.

Kapselointi niputtaa datan ja sitä käsittelevät funktiot yhden luokan sisälle ja piilottaa sitten sisäiset tiedot yksityisten jäsenten avulla. Julkiset jäsenfunktiot paljastavat hallitun rajapinnan, joka suojaa dataa vahingossa tapahtuvalta tai luvattomalta käytöltä.

Kyllä. Tekoälykoodausavustajat muuttavat lyhyen kehotteen tai kommentin työluokkamääritelmiksi, mukaan lukien datajäsenet, käyttöoikeusmäärittelijät, konstruktorit ja jäsenfunktiot. Tarkista aina luodut käyttöoikeustasot ja alustuslogiikka ennen koodin kääntämistä.

Kyllä. GitHub Copilot ehdottaa luokkamäärittelyjä, konstruktoreita, getter-funktioita ja setter-funktioita kirjoittaessasi. Se käsittelee toistuvat mallilausekkeet nopeasti, vaikka sinun tulisi silti varmistaa jäsenten käyttöoikeudet, konstruktorin logiikka ja objektien käyttö ennen rakentamista.

Tiivistä tämä viesti seuraavasti: