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.
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:
Her er et skjermbilde av koden:
Kode Forklaring:
- Inkluder iostream-headerfilen i koden vår for å bruke funksjonene.
- Inkluderer std-navneområdet i koden vår for å bruke klassene uten å kalle det.
- Erklær en klasse som heter Telefon.
- Ved å bruke modifikatoren for offentlig tilgang til å merke variablene vi er i ferd med å lage som offentlig tilgjengelige.
- Deklarer den variable kostnaden for en dobbel datatype.
- Deklarer en heltallsvariabel kalt spor.
- Slutten av klassekroppen.
- Kaller opp hoved()-funksjonen. Programlogikken bør legges til i hoveddelen.
- Lag et objekt kalt Y6 av typen Telefon. Dette kalles instansiering.
- Lag et objekt kalt Y7 av typen Telefon. Dette kalles instansiering.
- 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.
- 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.
- 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.
- 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.
- Skriv ut prisen for Y6 på konsollen sammen med annen tekst.
- Skriv ut prisen for Y7 på konsollen sammen med annen tekst.
- Skriv ut antall spor for Y6 sammen med annen tekst.
- Skriv ut antall spor for Y7 sammen med annen tekst.
- Programmet må returnere en verdi ved vellykket gjennomføring.
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluder iostream-headerfilen i koden vår for å bruke funksjonene.
- Inkluder std-navneområdet i koden vår for å bruke klassene uten å kalle det.
- Lag en klasse som heter ClassA.
- Bruk modifikatoren for offentlig tilgang til å merke klassemedlemmet som skal opprettes som offentlig tilgjengelig.
- Opprett funksjonen som heter set_a() som tar en heltallsverdi val.
- Lag en funksjon kalt get_a().
- Bruk modifikatoren for privat tilgang til å merke klassemedlemmet som skal opprettes som privat tilgjengelig.
- Deklarer en heltallsvariabel kalt a.
- Slutten av klassekroppen.
- Bruk klassenavnet og scope resolution-operatoren for å få tilgang til funksjonen get_a(). Vi ønsker å definere hva funksjonen gjør når den startes.
- Funksjonen get_a() skal returnere verdien til variabel a når den påkalles.
- Slutten av definisjonen av funksjonen get_a().
- Bruk klassenavnet og omfangsoppløsningsoperatoren for å få tilgang til funksjonen set_a(). Vi ønsker å definere hva funksjonen gjør når den startes.
- Tilordne verdien av variabelen val til variabel a.
- Slutt på definisjon av funksjonen set_a().
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Lag en forekomst av ClassA og gi den navnet a.
- Bruk klasseforekomsten ovenfor og funksjonen set_a() for å tilordne en verdi på 20 til variabelen a.
- Skriver ut litt tekst ved siden av verdien til variabel a på konsollen. Verdien av variabel a oppnås ved å kalle funksjonen get_a().
- Programmet må returnere verdi ved vellykket gjennomføring.
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluder iostream-headerfilen i koden vår for å bruke funksjonene.
- Inkluder std-navneområdet i koden vår for å bruke klassene uten å kalle det.
- Opprett en klasse som heter ParentClass.
- Bruk modifikatoren for beskyttet tilgang til å merke klassemedlemmet som skal opprettes som beskyttet.
- Opprett en heltallsvariabel med navn.
- Slutten av klassekroppen.
- Opprett en ny klasse kalt ChildClass som arver ParentClass.
- Bruk modifikatoren for beskyttet tilgang til å merke klassemedlemmet som skal opprettes som tilgjengelig for barneklasser.
- Opprett funksjonen kalt setId() som tar én heltallsverdi x.
- Tilordne verdien av variabelen x til variabelverdien.
- Slutt på definisjon av funksjonen setId().
- Lag en funksjon kalt displayValue().
- Skriv ut verdien av variabelen med navn på konsollen sammen med annen tekst.
- Slutten av brødteksten til funksjonen displayValue().
- Slutten av brødteksten til klassen som heter ChildClass.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Opprett en forekomst av ChildClass og gi den navnet c.
- Bruk klasseforekomsten ovenfor og funksjonen setId() for å tilordne en verdi på 21 til variabelen x.
- Bruk klasseforekomsten ovenfor til å kalle funksjonen som heter displayValue().
- Programmet må returnere verdi ved vellykket gjennomføring.
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluder iostream-headerfilen i programmet vårt for å bruke funksjonene.
- Inkluder strengoverskriftsfilen i programmet vårt for å bruke funksjonene.
- Inkluder std-navneområdet i koden vår for å bruke klassene uten å kalle det.
- Lag en klasse som heter Guru99.
- Bruk modifikatoren for offentlig tilgang til å merke klassemedlemmene vi er i ferd med å opprette som offentlig tilgjengelige.
- Lag en strengvariabel med navnet tutorial_name.
- Opprett en heltallsvariabel kalt id.
- Lag en funksjon kalt printname(). Denne funksjonen er ikke definert i klassedefinisjonen.
- Lag en funksjon kalt printed(). Denne funksjonen er definert i klassedefinisjonen. Hoveddelen er lagt til i klassedefinisjonen.
- 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.
- Slutten av hoveddelen av funksjonen printid().
- Slutten av kroppen til klassen Guru99.
- Starten på definisjonen av funksjonen printname().
- 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.
- Slutten av definisjonen av printname() funksjon.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Lag en forekomst av klassen Guru99 og gi den navnet guru99.
- Bruk forekomsten ovenfor for å tilordne en verdi av C++ til variabelen tutorial_name.
- Bruk guru99-forekomsten til å tilordne en verdi på 1001 til variabel-ID.
- Bruk forekomsten guru99 til å kalle funksjonen printname() .
- Kall kommandoen slutt (sluttlinje) for å skrive ut en ny tom linje på konsollen.
- Bruk forekomsten guru99 for å kalle funksjonen printid().
- Programmet må returnere verdi ved vellykket gjennomføring.
- 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:
Her er et skjermbilde av koden:
Kodeforklaring:
- Inkluder iostream-headerfilen i koden for å bruke funksjonene.
- Inkluder std-navneområdet i koden vår for å bruke klassene uten å kalle det.
- Lag en klasse som heter ClassA.
- Bruk modifikatoren for offentlig tilgang til å merke medlemmet vi er i ferd med å opprette som offentlig tilgjengelig.
- Lag en konstruktør for klassen.
- 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.
- Slutten av kroppen til klassekonstruktøren.
- Lag en destruktor for klassen.
- 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.
- Slutten av kroppen til destruktoren.
- Slutten av klassekroppen.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Lag et klasseobjekt og gi det navnet a. Konstruktøren vil bli tilkalt.
- Lag en heltallsvariabel kalt p og tilordne den verdien 1.
- Lag en if-setningsblokk ved å bruke variabelen p.
- Lag et klasseobjekt og gi det navnet b. Destruktoren vil bli tilkalt.
- Slutten av brødteksten til if-setningen.
- 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.








