C++ Klasse og objekt med eksempel

โšก Smart oppsummering

Klasser og objekter i C++ danner grunnlaget for objektorientert programmering, der en klasse definerer en blรฅkopi av data og medlemsfunksjoner, og et objekt er en konkret instans laget fra denne blรฅkopien.

  • ๐Ÿ”ท Klasseplan: A C++ klassen samler datamedlemmer og medlemsfunksjoner i รฉn brukerdefinert type.
  • ๐Ÿ”‘ Tilgangsmodifikatorer: Nรธkkelordene private, public og protected styrer hvor klassemedlemmer kan nรฅs.
  • ๐Ÿงฑ Objektinstansiering: Et objekt opprettes fra en klasse ved hjelp av syntaksen klassenavn objektnavn.
  • ๐Ÿ‘‰ Medlemstilgang: Punktumoperatoren nรฅr offentlige medlemmer, mens medlemsfunksjoner manipulerer de lagrede dataene.
  • โš™๏ธ Konstruktรธrer: Konstruktรธrer initialiserer objekter automatisk, og destruktorer frigir dem nรฅr de gรฅr utenfor omfanget.
  • ๐Ÿค– AI-hjelp: GitHub Copilot og lignende AI-assistenter stillaserer klassedefinisjoner og konstruktรธrer fra en kort kommentar.

C++ Klasse og objekt

Hva er en klasse?

A C++ klasse kombinerer data og metoder for รฅ manipulere dataene til รฉn. Klasser bestemmer ogsรฅ formene til objekter. Dataene og metodene i en klasse er kjent som klassemedlemmer. En klasse er en brukerdefinert datatype. For รฅ fรฅ tilgang til klassemedlemmene bruker vi en forekomst av klassen. Du kan se en klasse som en blรฅkopi for et objekt.

En klasse kan vรฆre en prototype for et hus. Den viser plasseringen og stรธrrelsene pรฅ dรธrer, vinduer, gulv osv. Fra disse beskrivelsene kan vi konstruere et hus. Huset blir objektet. Det er mulig รฅ lage mange hus fra prototypen. Det er ogsรฅ mulig รฅ lage mange objekter fra en klasse.

C++ klasse som en blรฅkopi for objekter

I figuren ovenfor har vi en enkelt husprototype. Fra denne prototypen har vi laget to hus med forskjellige funksjoner.

Med ideen om en klasse som en blรฅkopi i tankene, er neste trinn รฅ se hvordan en deklareres i kode.

Klasseerklรฆring

In C++, defineres en klasse ved hjelp av nรธkkelordet class. Dette skal etterfรธlges av klassenavnet. Klassens innhold legges deretter til mellom krรธllparenteser { }.

syntax

class class-name
   {
   // data
   // functions
   };
  • Ocuco klassenavn er navnet som skal tildeles klassen.
  • Ocuco dato er dataene for klassen, vanligvis deklarert som variabler.
  • Ocuco funksjoner er klassefunksjonene.

ร… deklarere klassenavnet og brรธdteksten reiser naturligvis spรธrsmรฅlet om hvem som kan bruke hvert medlem.

Private og offentlige nรธkkelord

Du mรฅ ha kommet over disse to sรธkeordene. De er tilgangsmodifikatorer.

Private:

Nรฅr det private nรธkkelordet brukes til รฅ definere en funksjon eller klasse, blir det privat. Slike er kun tilgjengelige fra klassen.

Offentlig:

Det offentlige sรธkeordet gjรธr derimot data/funksjoner offentlige. Disse er tilgjengelige utenfra klassen.

Etter at en klasse eksisterer, kan objekter opprettes fra den, omtrent pรฅ samme mรฅte som variabler opprettes fra en datatype.

Objektdefinisjon

Objekter opprettes fra klasser. Klasseobjekter deklareres pรฅ samme mรฅte som variabler deklareres. Klassenavnet mรฅ komme fรธrst, etterfulgt av objektnavnet. Objektet er av klassetypen.

syntax

class-name object-name;
  • Ocuco klassenavn er navnet pรฅ klassen som et objekt skal opprettes fra.
  • Ocuco objektnavn er navnet som skal tildeles det nye objektet.

Denne prosessen med รฅ lage et objekt fra en klasse er kjent som instansiering.

Nรฅr et objekt er opprettet, kan dets offentlige medlemmer nรฅs direkte via en enkel operator.

Tilgang til datamedlemmer

For รฅ fรฅ tilgang til offentlige medlemmer av en klasse bruker vi (.)dot-operatoren. Dette er medlemmer merket med offentlig tilgangsmodifikator.

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

Utgang:

C++ tilgang til offentlige datamedlemmer Eksempel 1 utdata

Her er et skjermbilde av koden:

C++ tilgang til offentlige datamedlemmer Eksempel 1 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
  2. Inkluderer std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
  3. Erklรฆr en klasse som heter Telefon.
  4. Ved รฅ bruke modifikatoren for offentlig tilgang til รฅ merke variablene vi er i ferd med รฅ lage som offentlig tilgjengelige.
  5. Deklarer den variable kostnaden for en dobbel datatype.
  6. Deklarer en heltallsvariabel kalt spor.
  7. Slutten av klassekroppen.
  8. Kaller opp hoved()-funksjonen. Programlogikken bรธr legges til i hoveddelen.
  9. Lag et objekt kalt Y6 av typen Telefon. Dette kalles instansiering.
  10. Lag et objekt kalt Y7 av typen Telefon. Dette kalles instansiering.
  11. Fรฅ tilgang til variabel-/medlemskostnaden for klassen Telefon ved รฅ bruke objektet Y6. Verdien er satt til 100.0. Kostnaden for Y6 er nรฅ satt til 100.0.
  12. Fรฅ tilgang til variabel-/medlemsplassene til klasse Phone ved รฅ bruke objektet Y6. Verdien er satt til 2. Sporene for Y6 er nรฅ satt til 2.
  13. Fรฅ tilgang til variabel-/medlemskostnaden for klassen Telefon ved รฅ bruke objektet Y7. Verdien er satt til 200.0. Kostnaden for Y7 er nรฅ satt til 200.0.
  14. Fรฅ tilgang til variabel-/medlemsplassene til klasse Phone ved รฅ bruke objektet Y7. Verdien er satt til 2. Sporene for Y7 er nรฅ satt til 2.
  15. Skriv ut prisen for Y6 pรฅ konsollen sammen med annen tekst.
  16. Skriv ut prisen for Y7 pรฅ konsollen sammen med annen tekst.
  17. Skriv ut antall spor for Y6 sammen med annen tekst.
  18. Skriv ut antall spor for Y7 sammen med annen tekst.
  19. Programmet mรฅ returnere en verdi ved vellykket gjennomfรธring.
  20. Slutten av hoveddelen av funksjonen main().

Offentlige medlemmer er รฅpne for ekstern kode, men private medlemmer fรธlger mye strengere tilgangsregler.

Hva er en privat klasse?

Klassemedlemmer merket som private kan bare nรฅs av funksjoner definert i klassen. Ethvert objekt eller funksjon definert utenfor klassen kan ikke fรฅ direkte tilgang til slike medlemmer. Et privat klassemedlem er kun tilgjengelig for medlems- og vennefunksjoner.

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

Utgang:

C++ Eksempel 2 utdata for privat klassemedlem

Her er et skjermbilde av koden:

C++ Eksempel 2-kode for privat klassemedlem

Code Forklaring:

  1. Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter ClassA.
  4. Bruk modifikatoren for offentlig tilgang til รฅ merke klassemedlemmet som skal opprettes som offentlig tilgjengelig.
  5. Opprett funksjonen som heter set_a() som tar en heltallsverdi val.
  6. Lag en funksjon kalt get_a().
  7. Bruk modifikatoren for privat tilgang til รฅ merke klassemedlemmet som skal opprettes som privat tilgjengelig.
  8. Deklarer en heltallsvariabel kalt a.
  9. Slutten av klassekroppen.
  10. Bruk klassenavnet og scope resolution-operatoren for รฅ fรฅ tilgang til funksjonen get_a(). Vi รธnsker รฅ definere hva funksjonen gjรธr nรฅr den startes.
  11. Funksjonen get_a() skal returnere verdien til variabel a nรฅr den pรฅkalles.
  12. Slutten av definisjonen av funksjonen get_a().
  13. Bruk klassenavnet og omfangsopplรธsningsoperatoren for รฅ fรฅ tilgang til funksjonen set_a(). Vi รธnsker รฅ definere hva funksjonen gjรธr nรฅr den startes.
  14. Tilordne verdien av variabelen val til variabel a.
  15. Slutt pรฅ definisjon av funksjonen set_a().
  16. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  17. Lag en forekomst av ClassA og gi den navnet a.
  18. Bruk klasseforekomsten ovenfor og funksjonen set_a() for รฅ tilordne en verdi pรฅ 20 til variabelen a.
  19. Skriver ut litt tekst ved siden av verdien til variabel a pรฅ konsollen. Verdien av variabel a oppnรฅs ved รฅ kalle funksjonen get_a().
  20. Programmet mรฅ returnere verdi ved vellykket gjennomfรธring.
  21. Slutten av hoveddelen av funksjonen main().

Beskyttede medlemmer sitter mellom privat og offentlig, og legger til รฉn nรธkkelfunksjon for arv.

Hva er en beskyttet klasse?

Klassemedlemmer merket som beskyttet har en fordel fremfor de merket som private. De kan nรฅs av funksjoner innenfor definisjonen deres. I tillegg kan de nรฅs fra avledede klasser.

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

Utgang:

C++ beskyttet klassemedlem Eksempel 3 utdata

Her er et skjermbilde av koden:

C++ Eksempel 3 kode for beskyttet klassearv

Code Forklaring:

  1. Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
  3. Opprett en klasse som heter ParentClass.
  4. Bruk modifikatoren for beskyttet tilgang til รฅ merke klassemedlemmet som skal opprettes som beskyttet.
  5. Opprett en heltallsvariabel med navn.
  6. Slutten av klassekroppen.
  7. Opprett en ny klasse kalt ChildClass som arver ParentClass.
  8. Bruk modifikatoren for beskyttet tilgang til รฅ merke klassemedlemmet som skal opprettes som tilgjengelig for barneklasser.
  9. Opprett funksjonen kalt setId() som tar รฉn heltallsverdi x.
  10. Tilordne verdien av variabelen x til variabelverdien.
  11. Slutt pรฅ definisjon av funksjonen setId().
  12. Lag en funksjon kalt displayValue().
  13. Skriv ut verdien av variabelen med navn pรฅ konsollen sammen med annen tekst.
  14. Slutten av brรธdteksten til funksjonen displayValue().
  15. Slutten av brรธdteksten til klassen som heter ChildClass.
  16. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  17. Opprett en forekomst av ChildClass og gi den navnet c.
  18. Bruk klasseforekomsten ovenfor og funksjonen setId() for รฅ tilordne en verdi pรฅ 21 til variabelen x.
  19. Bruk klasseforekomsten ovenfor til รฅ kalle funksjonen som heter displayValue().
  20. Programmet mรฅ returnere verdi ved vellykket gjennomfรธring.
  21. Slutten av hoveddelen av funksjonen main().

I tillegg til รฅ lagre data, grupperer en klasse ogsรฅ funksjonene som opererer pรฅ disse dataene.

Klassemedlemsfunksjoner

Funksjoner hjelper oss med รฅ manipulere data. Klassemedlemsfunksjoner kan defineres pรฅ to mรฅter:

  • Inne i klassedefinisjonen
  • Utenfor klassedefinisjonen

Hvis en funksjon skal defineres utenfor en klassedefinisjon, mรฅ vi bruke scope resolution-operatoren (::). Dette skal vรฆre ledsaget av klasse- og funksjonsnavn.

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

Utgang:

C++ klassemedlemsfunksjoner Eksempel 4 utdata

Her er et skjermbilde av koden:

C++ klassemedlemsfunksjoner Eksempel 4 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i programmet vรฅrt for รฅ bruke funksjonene.
  2. Inkluder strengoverskriftsfilen i programmet vรฅrt for รฅ bruke funksjonene.
  3. Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
  4. Lag en klasse som heter Guru99.
  5. Bruk modifikatoren for offentlig tilgang til รฅ markere klassemedlemmene vi skal opprette som offentlig tilgjengelige.
  6. Lag en strengvariabel med navnet tutorial_name.
  7. Opprett en heltallsvariabel kalt id.
  8. Lag en funksjon kalt printname(). Denne funksjonen er ikke definert i klassedefinisjonen.
  9. Opprett en funksjon med navnet printid(). Denne funksjonen er definert i klassedefinisjonen. Brรธdteksten er lagt til i klassedefinisjonen.
  10. Skriv ut verdien av variabel-ID sammen med annen tekst pรฅ konsollen. Merk at dette er lagt til i hoveddelen av printid()-funksjonen. Den vil bare bli utfรธrt nรฅr printid()-funksjonen kalles.
  11. Slutten av hoveddelen av funksjonen printid().
  12. Slutten av klassen Guru99.
  13. Starten pรฅ definisjonen av funksjonen printname().
  14. Skriv ut verdien av variabelen tutorial_name pรฅ konsollen sammen med annen tekst. Merk at dette er lagt til i hoveddelen av printname()-funksjonen. Den vil bare bli utfรธrt nรฅr funksjonen printname() kalles.
  15. Slutten av definisjonen av printname() funksjon.
  16. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  17. Opprett en instans av klassen Guru99 og ga den navnet guru99.
  18. Bruk forekomsten ovenfor for รฅ tilordne en verdi av C++ til variabelen tutorial_name.
  19. Bruk guru99-forekomsten til รฅ tilordne en verdi pรฅ 1001 til variabel-ID.
  20. Bruk forekomsten guru99 til รฅ kalle funksjonen printname() .
  21. Kall kommandoen slutt (sluttlinje) for รฅ skrive ut en ny tom linje pรฅ konsollen.
  22. Bruk forekomsten guru99 for รฅ kalle funksjonen printid().
  23. Programmet mรฅ returnere verdi ved vellykket gjennomfรธring.
  24. Slutten av hoveddelen av funksjonen main().

To spesielle medlemsfunksjoner kjรธrer automatisk nรฅr et objekt opprettes og nรฅr det รธdelegges.

Konstruktรธrer og destruktorer

Hva er en konstruktรธr?

Konstruktรธrer er spesialfunksjoner som initialiserer objekter. C++ kompilatorer kalle en konstruktรธr nรฅr man oppretter et objekt. Konstruktรธrene hjelper til med รฅ tilordne verdier til klassemedlemmer. Dette skjer selvfรธlgelig etter at de har fรฅtt tildelt litt minneplass.

Hva er en destruktรธr?

Destruktorer pรฅ den annen side hjelper til med รฅ รธdelegge klasseobjekter.

Konstruktรธrnavnet mรฅ vรฆre likt klassenavnet. Konstruktรธrer har ikke returtype.

Konstruktรธren kan defineres i eller utenfor klassekroppen. Hvis den er definert utenfor klassekroppen, bรธr den defineres med klassenavnet og scope-resolusjonsoperatรธren (::).

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

Utgang:

C++ Konstruktรธr og destruktor Eksempel 5 utdata

Her er et skjermbilde av koden:

C++ Konstruktรธr og destruktor Eksempel 5 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i koden for รฅ bruke funksjonene.
  2. Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
  3. Lag en klasse som heter ClassA.
  4. Bruk modifikatoren for offentlig tilgang til รฅ merke medlemmet vi er i ferd med รฅ opprette som offentlig tilgjengelig.
  5. Lag en konstruktรธr for klassen.
  6. Tekst som skal skrives ut pรฅ konsollen nรฅr konstruktรธren kalles. Endl er en C++ nรธkkelord, som betyr sluttlinje. Den flytter musepekeren til neste linje.
  7. Slutten av kroppen til klassekonstruktรธren.
  8. Lag en destruktor for klassen.
  9. Tekst som skal skrives ut pรฅ konsollen nรฅr destruktoren kalles. Endl er en C++ nรธkkelord, som betyr sluttlinje. Den flytter musepekeren til neste linje.
  10. Slutten av kroppen til destruktoren.
  11. Slutten av klassekroppen.
  12. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  13. Lag et klasseobjekt og gi det navnet a. Konstruktรธren vil bli tilkalt.
  14. Lag en heltallsvariabel kalt p og tilordne den verdien 1.
  15. Lag en if-setningsblokk ved รฅ bruke variabelen p.
  16. Lag et klasseobjekt og gi det navnet b. Destruktoren vil bli tilkalt.
  17. Slutten av brรธdteksten til if-setningen.
  18. Slutten av hoveddelen av hoved()-funksjonen.

Spรธrsmรฅl og svar

En klasse er en brukerdefinert blรฅkopi som grupperer datamedlemmer og medlemsfunksjoner i รฉn type. Et objekt er en konkret instans bygget fra den klassen, og som inneholder sin egen kopi av dataene beskrevet av blรฅkopien.

Hovedforskjellen er standardtilgang: medlemmer av en klasse er private som standard, mens medlemmer av en struktur er offentlige som standard. Begge stรธtter arv, konstruktรธrer og innkapsling i C++.

C++ stรธtter tre vanlige konstruktรธrtyper: en standardkonstruktรธr uten argumenter, en parameterisert konstruktรธr som godtar verdier for รฅ initialisere medlemmer, og en kopikonstruktรธr som oppretter et nytt objekt fra et eksisterende objekt av samme klasse.

En venn-funksjon er en ikke-medlemsfunksjon som gis tilgang til de private og beskyttede medlemmene av en klasse. Den deklareres inne i klassen med venn-nรธkkelordet, men defineres utenfor den som en vanlig funksjon.

ยซthisยป-pekeren er en implisitt peker som er tilgjengelig i alle ikke-statiske medlemsfunksjoner. Den peker til objektet som kalte funksjonen, slik at koden kan referere til objektets egne medlemmer og lรธse navnekonflikter mellom parametere og datamedlemmer.

Innkapsling samler data og funksjonene som opererer pรฅ dem i รฉn enkelt klasse, og skjuler deretter interne detaljer ved hjelp av private medlemmer. Offentlige medlemsfunksjoner eksponerer et kontrollert grensesnitt som beskytter dataene mot utilsiktet eller uautorisert tilgang.

Ja. AI-kodingsassistenter gjรธr en kort ledetekst eller kommentar om til arbeidsklassedefinisjoner, inkludert datamedlemmer, tilgangsspesifikatorer, konstruktรธrer og medlemsfunksjoner. Gjennomgรฅ alltid de genererte tilgangsnivรฅene og initialiseringslogikken fรธr du kompilerer koden.

Ja. GitHub Copilot foreslรฅr klassedeklarasjoner, konstruktรธrer, gettere og settere mens du skriver. Den hรฅndterer repeterende standardtekst raskt, men du bรธr fortsatt bekrefte medlemstilgang, konstruktรธrlogikk og objektbruk fรธr du bygger.

Oppsummer dette innlegget med: