C++ Klasse og objekt med eksempel

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 vรฆre en prototype for et hus. Den viser plassering og stรธrrelse pรฅ dรธrer, vinduer, gulv osv. Fra disse beskrivelsene kan vi bygge 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

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

Klasseerklรฆring

I C+ defineres en klasse ved รฅ bruke klassenรธkkelordet. Dette skal fรธlges av klassenavnet. Klassekroppen legges deretter til mellom krรธllete klammeparenteser { }.

syntax

class class-name
   {
   // data
   // functions
   };
  • Klassenavnet er navnet som skal tildeles til klassen.
  • Dataene er dataene for klassen, vanligvis deklarert som variabler.
  • Funksjonene er klassefunksjonene.

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.

Objektdefinisjon

Objekter lages fra klasser. Klasseobjekter er deklarert pรฅ samme mรฅte som variabler er deklarert. Klassenavnet mรฅ starte, etterfulgt av objektnavnet. Objektet til klassetypen.

syntax

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

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

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:

Tilgang til datamedlemmer

Her er et skjermbilde av koden:

Tilgang til datamedlemmer

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().

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.

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

Tilgang til datamedlemmer

Her er et skjermbilde av koden:

Tilgang til datamedlemmer

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().

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:

Tilgang til datamedlemmer

Her er et skjermbilde av koden:

Tilgang til datamedlemmer

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().

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

Utgang:

Klassemedlemsfunksjoner

Her er et skjermbilde av koden:

Klassemedlemsfunksjoner

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 รฅ merke klassemedlemmene vi er i ferd med รฅ 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. Lag en funksjon kalt printed(). Denne funksjonen er definert i klassedefinisjonen. Hoveddelen 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().

Konstruktรธrer og destruktorer

Hva er konstruktรธrer?

Konstruksjoner er spesielle funksjoner som initialiserer objekter. De C++ kompilatorer kaller en konstruktรธr nรฅr du oppretter et objekt. Konstruktรธrene hjelper til med รฅ tildele verdier til klassemedlemmene. Dette er selvfรธlgelig etter at de har blitt tildelt litt minneplass.

Hva er Destructors?

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

Utgang:

Konstruktรธrer og destruktorer

Her er et skjermbilde av koden:

Konstruktรธrer og destruktorer

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.

Sammendrag

  • C++ er objektorientert.
  • Klasser utgjรธr hovedtrekkene i C++ som gjรธr det objektorientert.
  • A C++ klasse kombinerer data og metoder for รฅ manipulere dataene til รฉn.
  • En klasse er en blรฅkopi for et objekt.
  • Klasser bestemmer formen til et objekt.
  • Dataene og metodene i en klasse er kjent som klassemedlemmer.
  • For รฅ fรฅ tilgang til klassemedlemmer, bรธr du bruke en forekomst av klassen.
  • For รฅ lage en klasse bruker vi klassenรธkkelordet.
  • Klassemedlemsfunksjonene kan defineres i eller utenfor en klasse.

Oppsummer dette innlegget med: