C++ Klasse og objekt med eksempel
⚡ Smart opsummering
Klasser og objekter i C++ danner grundlaget for objektorienteret programmering, hvor en klasse definerer en blueprint af data og medlemsfunktioner, og et objekt er en konkret instans oprettet ud fra denne blueprint.

Hvad er en klasse?
A C++ klasse kombinerer data og metoder til at manipulere dataene til én. Klasser bestemmer også objekternes form. Dataene og metoderne i en klasse er kendt som klassemedlemmer. En klasse er en brugerdefineret datatype. For at få adgang til klassens medlemmer bruger vi en forekomst af klassen. Du kan se en klasse som en blueprint for et objekt.
En klasse kan være en prototype for et hus. Den viser placeringen og størrelserne af døre, vinduer, gulve osv. Ud fra disse beskrivelser kan vi konstruere et hus. Huset bliver objektet. Det er muligt at oprette mange huse ud fra prototypen. Det er også muligt at oprette mange objekter ud fra en klasse.
I ovenstående figur har vi en enkelt husprototype. Ud fra denne prototype har vi skabt to huse med forskellige funktioner.
Med ideen om en klasse som en blueprint i tankerne, er det næste skridt at se, hvordan en sådan deklareres i kode.
Klasseerklæring
In C++, defineres en klasse ved hjælp af nøgleordet class. Dette skal efterfølges af klassenavnet. Klassens brødtekst tilføjes derefter mellem krøllede parenteser { }.
Syntaks
class class-name { // data // functions };
- klassenavn er det navn, der skal tildeles klassen.
- data er dataene for klassen, normalt deklareret som variabler.
- funktioner er klassefunktionerne.
Deklarering af klassens navn og brødtekst rejser naturligvis spørgsmålet om, hvem der må bruge hvert medlem.
Private og offentlige søgeord
Du må være stødt på disse to søgeord. De er adgangsmodifikatorer.
Privat:
Når det private nøgleord bruges til at definere en funktion eller klasse, bliver det privat. Sådanne er kun tilgængelige inde fra klassen.
Offentlig:
Det offentlige søgeord gør derimod data/funktioner offentlige. Disse er tilgængelige uden for klassen.
Når en klasse eksisterer, kan objekter oprettes ud fra den, ligesom variabler oprettes ud fra en datatype.
Objektdefinition
Objekter oprettes ud fra klasser. Klasseobjekter deklareres på samme måde som variabler deklareres. Klassenavnet skal komme først, efterfulgt af objektnavnet. Objektet er af klassetypen.
Syntaks
class-name object-name;
- klassenavn er navnet på den klasse, som et objekt skal oprettes fra.
- objekt-navn er det navn, der skal tildeles det nye objekt.
Denne proces med at skabe et objekt fra en klasse er kendt som instansiering.
Når et objekt er oprettet, kan dets offentlige medlemmer nås direkte via en simpel operator.
Adgang til datamedlemmer
For at få adgang til offentlige medlemmer af en klasse bruger vi (.)dot-operatoren. Disse er medlemmer markeret med offentlig adgangsmodifikator.
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; }
Output:
Her er et skærmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluderer std-navneområdet i vores kode for at bruge dets klasser uden at kalde det.
- Erklær en klasse ved navn Telefon.
- Brug af public access modifier til at markere de variabler, vi er ved at oprette, som offentligt tilgængelige.
- Angiv de variable omkostninger for en dobbelt datatype.
- Deklarer en heltalsvariabel ved navn slots.
- Slutningen af klassens krop.
- Kalder hoved()-funktionen. Programlogikken skal tilføjes i dens krop.
- Opret et objekt med navnet Y6 af typen Telefon. Dette kaldes instansiering.
- Opret et objekt med navnet Y7 af typen Telefon. Dette kaldes instansiering.
- Få adgang til den variable/medlemspris for klasse Telefon ved hjælp af objektet Y6. Værdien er sat til 100.0. Prisen på Y6 er nu sat til 100.0.
- Få adgang til variable/medlemspladserne i klasse Telefon ved hjælp af objektet Y6. Værdien er sat til 2. Slots for Y6 er nu sat til 2.
- Få adgang til den variable/medlemspris for klasse Telefon ved hjælp af objektet Y7. Værdien er sat til 200.0. Prisen på Y7 er nu sat til 200.0.
- Få adgang til variable/medlemspladserne i klasse Telefon ved hjælp af objektet Y7. Værdien er sat til 2. Slots for Y7 er nu sat til 2.
- Udskriv prisen på Y6 på konsollen sammen med anden tekst.
- Udskriv prisen på Y7 på konsollen sammen med anden tekst.
- Udskriv antallet af pladser til Y6 sammen med anden tekst.
- Udskriv antallet af pladser til Y7 sammen med anden tekst.
- Programmet skal returnere en værdi efter vellykket afslutning.
- Slutningen af hoveddelen af funktionen main().
Offentlige medlemmer er åbne for ekstern kode, men private medlemmer følger meget strengere adgangsregler.
Hvad er en privat klasse?
Klassemedlemmer markeret som private kan kun tilgås af funktioner defineret i klassen. Ethvert objekt eller funktion defineret uden for klassen kan ikke få direkte adgang til sådanne medlemmer. Et privat klassemedlem er kun tilgået af medlems- og vennefunktioner.
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; }
Output:
Her er et skærmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder std-navneområdet i vores kode for at bruge dets klasser uden at kalde det.
- Opret en klasse ved navn ClassA.
- Brug offentlig adgangsmodifikator til at markere klassemedlemmet, der skal oprettes, som offentligt tilgængeligt.
- Opret funktionen med navnet set_a(), der tager en heltalsværdi val.
- Opret en funktion ved navn get_a().
- Brug den private adgangsmodifikator til at markere det klassemedlem, der skal oprettes, som privat tilgængeligt.
- Erklære en heltalsvariabel ved navn a.
- Slutningen af klassens krop.
- Brug klassenavnet og scope resolution operatoren for at få adgang til funktionen get_a(). Vi ønsker at definere, hvad funktionen gør, når den aktiveres.
- Funktionen get_a() skal returnere værdien af variabel a, når den aktiveres.
- Slut på definitionen af funktionen get_a().
- Brug klassenavnet og scope resolution operatoren for at få adgang til funktionen set_a(). Vi ønsker at definere, hvad funktionen gør, når den aktiveres.
- Tildeling af værdien af variablen val til variabel a.
- Slut på definition af funktionen sæt_a().
- Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
- Opret en forekomst af ClassA og giv den navnet a.
- Brug ovenstående klasseinstans og funktionen set_a() til at tildele en værdi på 20 til variablen a.
- Udskrivning af noget tekst ved siden af værdien af variabel a på konsollen. Værdien af variabel a fås ved at kalde funktionen get_a() .
- Programmet skal returnere værdi efter vellykket afslutning.
- Slutningen af hoveddelen af funktion main().
Beskyttede medlemmer sidder mellem privat og offentligt, hvilket tilføjer én nøglefunktion til arv.
Hvad er en beskyttet klasse?
Klassemedlemmer, der er markeret som beskyttede, har en fordel i forhold til dem, der er markeret som private. De kan tilgås af funktioner inden for klassen for deres definition. Derudover kan de tilgås fra afledte 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; }
Output:
Her er et skærmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder std-navneområdet i vores kode for at bruge dets klasser uden at kalde det.
- Opret en klasse med navnet ParentClass.
- Brug den beskyttede adgangsmodifikator til at markere det klassemedlem, der skal oprettes, som beskyttet.
- Opret en heltalsvariabel med navnet værdi.
- Slutningen af klassens krop.
- Opret en ny klasse ved navn ChildClass, der arver ParentClass.
- Brug den beskyttede adgangsmodifikator til at markere det klassemedlem, der skal oprettes, som tilgængeligt for børneklasser.
- Opret funktionen ved navn setId(), der tager en heltalsværdi x.
- Tildeling af værdien af variablen x til variabelværdien.
- Slut på definition af funktionen setId().
- Opret en funktion ved navn displayValue().
- Udskriv værdien af variabelens navngivne værdi på konsollen sammen med anden tekst.
- Slutningen af brødteksten af funktionen displayValue().
- Slutningen af brødteksten i klassen ved navn ChildClass.
- Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
- Opret en instans af ChildClass og giv den navnet c.
- Brug ovenstående klasseinstans og funktionen setId() til at tildele en værdi på 21 til variablen x.
- Brug ovenstående klasseinstans til at kalde funktionen med navnet displayValue().
- Programmet skal returnere værdi efter vellykket afslutning.
- Slutningen af hoveddelen af funktion main().
Udover at lagre data grupperer en klasse også de funktioner, der opererer på disse data.
Klassemedlemsfunktioner
Funktioner hjælper os med at manipulere data. Klassemedlemsfunktioner kan defineres på to måder:
- Inde i klassedefinitionen
- Uden for klassedefinitionen
Hvis en funktion skal defineres uden for en klassedefinition, skal vi bruge scope resolution operatoren (::). Dette skal ledsages af klasse- og funktionsnavnene.
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; }
Output:
Her er et skærmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores program for at bruge dens funktioner.
- Inkluder strenghovedfilen i vores program for at bruge dens funktioner.
- Inkluder std-navneområdet i vores kode for at bruge dets klasser uden at kalde det.
- Opret en klasse med navnet Guru99.
- Brug modifikatoren for offentlig adgang til at markere de klassemedlemmer, vi er ved at oprette, som offentligt tilgængelige.
- Opret en strengvariabel med navnet tutorial_name.
- Opret en heltalsvariabel med navnet id.
- Opret en funktion ved navn printname(). Denne funktion er ikke defineret i klassedefinitionen.
- Opret en funktion med navnet printid(). Denne funktion er defineret i klassedefinitionen. Dens brødtekst er blevet tilføjet i klassedefinitionen.
- Udskriv værdien af variabel-id sammen med anden tekst på konsollen. Bemærk, at dette er blevet tilføjet i brødteksten af printid()-funktionen. Det vil kun blive udført, når printid()-funktionen kaldes.
- Slutningen af brødteksten af funktion printid().
- Slutningen af klassens krop Guru99.
- Starten på definitionen af funktionen printname().
- Udskriv værdien af variabel tutorial_name på konsollen sammen med anden tekst. Bemærk, at dette er blevet tilføjet i brødteksten af printname()-funktionen. Det vil kun blive udført, når funktionen printname() kaldes.
- Slut på definitionen af printname() funktion.
- Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
- Opret en instans af klassen Guru99 og giver den navnet guru99.
- Brug ovenstående instans til at tildele en værdi af C++ til variablen tutorial_name.
- Brug guru99-forekomsten til at tildele en værdi på 1001 til variabel-id.
- Brug forekomsten guru99 til at kalde funktionen printname() .
- Kald kommandoen slut (slutlinje) for at udskrive en ny tom linje på konsollen.
- Brug forekomsten guru99 til at kalde funktionen printid().
- Programmet skal returnere værdi efter vellykket afslutning.
- Slutningen af hoveddelen af funktionen main().
To særlige medlemsfunktioner kører automatisk, når et objekt oprettes, og når det ødelægges.
Konstruktører og destruktorer
Hvad er en konstruktør?
Konstruktører er specialfunktioner, der initialiserer objekter. C++ compilere kalde en konstruktør, når et objekt oprettes. Konstruktørerne hjælper med at tildele værdier til klassemedlemmer. Dette sker naturligvis, efter at de har fået tildelt noget hukommelsesplads.
Hvad er en destruktør?
Destruktorer på den anden side hjælper med at ødelægge klasseobjekter.
Konstruktørnavnet skal svare til klassenavnet. Konstruktører har ikke en returtype.
Konstruktøren kan defineres i eller uden for klassens krop. Hvis den er defineret uden for klassens krop, skal den defineres med klassenavnet og scope resolution operatoren (::).
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; } }
Output:
Her er et skærmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i koden for at bruge dens funktioner.
- Inkluder std-navneområdet i vores kode for at bruge dets klasser uden at kalde det.
- Opret en klasse ved navn ClassA.
- Brug offentlig adgangsmodifikator til at markere det medlem, vi er ved at oprette, som offentligt tilgængeligt.
- Opret en konstruktør til klassen.
- Tekst til udskrivning på konsollen, når konstruktøren kaldes. Endl er en C++ søgeord, hvilket betyder slutlinje. Det flytter musemarkøren til næste linje.
- Slutningen af kroppen af klassekonstruktøren.
- Opret en destruktor til klassen.
- Tekst, der skal udskrives på konsollen, når destruktoren kaldes. Endl er en C++ søgeord, hvilket betyder slutlinje. Det flytter musemarkøren til næste linje.
- Enden af destruktorens krop.
- Slutningen af klassens krop.
- Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
- Opret et klasseobjekt og giv det navnet a. Konstruktøren vil blive tilkaldt.
- Opret en heltalsvariabel ved navn p og tildel den en værdi på 1.
- Opret en if-sætningsblok ved hjælp af variablen p.
- Opret et klasseobjekt og giv det navnet b. Destruktoren vil blive tilkaldt.
- Slutningen af brødteksten i if-erklæringen.
- Slutningen af hoveddelen af funktionen main().








