C++ Klass och objekt med exempel
Vad är en klass?
A C++ klass kombinerar data och metoder för att manipulera data till en. Klasser bestämmer också formerna för objekt. Data och metoder som finns i en klass kallas klassmedlemmar. En klass är en användardefinierad datatyp. För att komma åt klassmedlemmarna använder vi en instans av klassen. Du kan se en klass som en ritning för ett objekt.
En klass vara en prototyp för ett hus. Den visar placering och storlekar på dörrar, fönster, golv etc. Utifrån dessa beskrivningar kan vi bygga ett hus. Huset blir föremålet. Det är möjligt att skapa många hus från prototypen. Det är också möjligt att skapa många objekt från en klass.
I figuren ovan har vi en prototyp för ett enda hus. Från denna prototyp har vi skapat två hus med olika funktioner.
Klassdeklaration
I C+ definieras en klass med nyckelordet klass. Detta ska följas av klassnamnet. Klasskroppen läggs sedan till mellan hängslen { }.
syntax
class class-name
{
// data
// functions
};
- Klassnamnet är namnet som ska tilldelas klassen.
- Data är data för klassen, normalt deklarerade som variabler.
- Funktionerna är klassfunktionerna.
Privata och offentliga sökord
Du måste ha stött på dessa två nyckelord. De är åtkomstmodifierare.
- Privat:
När det privata nyckelordet används för att definiera en funktion eller klass, blir det privat. Sådana är endast tillgängliga inifrån klassen.
- Offentlig:
Det offentliga nyckelordet gör däremot data/funktioner offentliga. Dessa är tillgängliga utanför klassen.
Objektdefinition
Objekt skapas från klasser. Klassobjekt deklareras på liknande sätt som variabler deklareras. Klassnamnet måste börja, följt av objektnamnet. Objektet för klasstypen.
syntax
class-name object-name;
- Klassnamnet är namnet på klassen från vilken ett objekt ska skapas.
- Objektnamnet är namnet som ska tilldelas det nya objektet.
Denna process att skapa ett objekt från en klass kallas instansiering.
Tillgång till datamedlemmar
För att komma åt offentliga medlemmar i en klass använder vi (.)dot-operatorn. Dessa är medlemmar märkta med public access modifier.
Exempelvis 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;
}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i vår kod för att kunna använda dess funktioner.
- Inkludera std-namnområdet i vår kod för att använda dess klasser utan att anropa det.
- Deklarera en klass som heter Telefon.
- Använda public access-modifieraren för att markera de variabler vi håller på att skapa som offentligt tillgängliga.
- Deklarera den rörliga kostnaden för en dubbel datatyp.
- Deklarera en heltalsvariabel med namnet slots.
- Slutet av klassens kropp.
- Anropar main()-funktionen. Programlogiken bör läggas till i dess kropp.
- Skapa ett objekt med namnet Y6 av typen Telefon. Detta kallas instansiering.
- Skapa ett objekt med namnet Y7 av typen Telefon. Detta kallas instansiering.
- Få tillgång till variabel-/medlemskostnaden för klass Telefon med hjälp av objektet Y6. Värdet är satt till 100.0. Kostnaden för Y6 är nu satt till 100.0.
- Få tillgång till variabel-/medlemsplatserna i klass Telefon med hjälp av objektet Y6. Värdet är satt till 2. Facket för Y6 är nu satt till 2.
- Få tillgång till variabel-/medlemskostnaden för klass Telefon med hjälp av objektet Y7. Värdet är satt till 200.0. Kostnaden för Y7 är nu satt till 200.0.
- Få tillgång till variabel-/medlemsplatserna i klass Telefon med hjälp av objektet Y7. Värdet är satt till 2. Facket för Y7 är nu satt till 2.
- Skriv ut kostnaden för Y6 på konsolen tillsammans med annan text.
- Skriv ut kostnaden för Y7 på konsolen tillsammans med annan text.
- Skriv ut antalet platser för Y6 tillsammans med annan text.
- Skriv ut antalet platser för Y7 tillsammans med annan text.
- Programmet måste returnera ett värde efter framgångsrikt slutförande.
- Slutet på huvuddelen av funktionen main().
Vad är en privatklass?
Klassmedlemmar markerade som privata kan endast nås av funktioner definierade inom klassen. Alla objekt eller funktioner som definieras utanför klassen kan inte komma åt sådana medlemmar direkt. En privat klassmedlem nås endast av medlems- och vänfunktioner.
Vad är en skyddad klass?
Klassmedlemmar som är markerade som skyddade har en fördel framför de som är markerade som privata. De kan nås av funktioner inom klassen för deras definition. Dessutom kan de nås från härledda klasser.
Exempelvis 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;
}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner.
- Inkludera std-namnområdet i vår kod för att använda dess klasser utan att anropa det.
- Skapa en klass som heter ClassA.
- Använd public access modifier för att markera klassmedlemmen som ska skapas som allmänt tillgänglig.
- Skapa funktionen som heter set_a() som tar ett heltalsvärde val.
- Skapa en funktion som heter get_a().
- Använd modifieraren för privat åtkomst för att markera klassmedlemmen som ska skapas som privat tillgänglig.
- Deklarera en heltalsvariabel med namnet a.
- Slutet av klassens kropp.
- Använd klassnamnet och scope resolution operatorn för att komma åt funktionen get_a(). Vi vill definiera vad funktionen gör när den anropas.
- Funktionen get_a() ska returnera värdet för variabel a när den anropas.
- Slutet på definitionen av funktionen get_a().
- Använd klassnamnet och scope resolution operatorn för att komma åt funktionen set_a(). Vi vill definiera vad funktionen gör när den anropas.
- Tilldela variabeln värdet till variabel a.
- Slutet på definitionen av funktionen set_a().
- Anropa main()-funktionen. Programlogiken bör läggas till i kroppen av denna funktion.
- Skapa en instans av ClassA och ge den namnet a.
- Använd ovanstående klassinstans och funktionen set_a() för att tilldela variabeln a ett värde på 20.
- Skriver ut lite text tillsammans med värdet för variabel a på konsolen. Värdet på variabel a erhålls genom att anropa funktionen get_a().
- Programmet måste returnera värde efter framgångsrikt slutförande.
- Slutet på huvuddelen av funktion main().
Exempelvis 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;
}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner.
- Inkludera std-namnområdet i vår kod för att använda dess klasser utan att anropa det.
- Skapa en klass som heter ParentClass.
- Använd modifieraren för skyddad åtkomst för att markera klassmedlemmen som ska skapas som skyddad.
- Skapa en heltalsvariabel med namnet värde.
- Slutet av klassens kropp.
- Skapa en ny klass med namnet ChildClass som ärver ParentClass.
- Använd modifieraren för skyddad åtkomst för att markera klassmedlemmen som ska skapas som tillgänglig för barnklasser.
- Skapa funktionen med namnet setId() som tar ett heltalsvärde x.
- Tilldela värdet för variabeln x till variabelvärdet.
- Slutet på definitionen av funktionen setId().
- Skapa en funktion som heter displayValue().
- Skriv ut värdet på variabelns namngivna värde på konsolen tillsammans med annan text.
- Slutet på kroppen av funktionen displayValue().
- Slutet på brödtexten för klassen som heter ChildClass.
- Anropa main()-funktionen. Programlogiken bör läggas till i kroppen av denna funktion.
- Skapa en instans av ChildClass och ge den namnet c.
- Använd ovanstående klassinstans och funktionen setId() för att tilldela variabeln x värdet 21.
- Använd klassinstansen ovan för att anropa funktionen med namnet displayValue().
- Programmet måste returnera värde efter framgångsrikt slutförande.
- Slutet på huvuddelen av funktion main().
Klassmedlemsfunktioner
Funktioner hjälper oss att manipulera data. Klassmedlemsfunktioner kan definieras på två sätt:
- Inuti klassdefinitionen
- Utanför klassdefinitionen
Om en funktion ska definieras utanför en klassdefinition måste vi använda scope resolution operator (::). Detta bör åtföljas av klass- och funktionsnamn.
Exempelvis 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;
}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i vårt program för att använda dess funktioner.
- Inkludera stränghuvudfilen i vårt program för att använda dess funktioner.
- Inkludera std-namnområdet i vår kod för att använda dess klasser utan att anropa det.
- Skapa en klass som heter Guru99.
- Använd modifieraren för offentlig åtkomst för att markera klassmedlemmarna som vi håller på att skapa som allmänt tillgängliga.
- Skapa en strängvariabel med namnet tutorial_name.
- Skapa en heltalsvariabel med namnet id.
- Skapa en funktion som heter printname(). Denna funktion är inte definierad i klassdefinitionen.
- Skapa en funktion som heter printed(). Denna funktion är definierad i klassdefinitionen. Dess kropp har lagts till inom klassdefinitionen.
- Skriv ut värdet för variabel-id tillsammans med annan text på konsolen. Observera att detta har lagts till i huvuddelen av printid()-funktionen. Den kommer bara att köras när funktionen printid() anropas.
- Slutet på funktionskroppen printid().
- Slutet på kroppen av klassen Guru99.
- Början av definitionen av funktionen printname().
- Skriv ut värdet för variabeln tutorial_name på konsolen tillsammans med annan text. Observera att detta har lagts till i funktionen printname()s brödtext. Den kommer bara att köras när funktionen printname() anropas.
- Slutet på definitionen av printname()-funktionen.
- Anropa main()-funktionen. Programlogiken bör läggas till i kroppen av denna funktion.
- Skapa en instans av klassen Guru99 och ge den namnet guru99.
- Använd ovanstående instans för att tilldela ett värde på C++ till variabeln tutorial_name.
- Använd guru99-instansen för att tilldela ett värde på 1001 till variabel-id.
- Använd instansen guru99 för att anropa funktionen printname() .
- Anropa kommandot slut (slutrad) för att skriva ut en ny tom rad på konsolen.
- Använd instansen guru99 för att anropa funktionen printid().
- Programmet måste returnera värde efter framgångsrikt slutförande.
- Slutet på huvuddelen av funktionen main().
Konstruktörer och destruktörer
Vad är konstruktörer?
Konstruktioner är specialfunktioner som initierar objekt. De C++ kompilatorer anropar en konstruktor när ett objekt skapas. Konstruktörerna hjälper till att tilldela klassmedlemmar värden. Naturligtvis är detta efter att de har tilldelats lite minnesutrymme.
Vad är Destructors?
Destruktörer å andra sidan hjälper till att förstöra klassobjekt.
Konstruktornamnet måste likna klassnamnet. Konstruktörer har ingen returtyp.
Konstruktorn kan definieras inom eller utanför klasskroppen. Om den definieras utanför klasskroppen bör den definieras med klassnamnet och scope resolution operator (::).
Exempelvis 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;
}
}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i koden för att använda dess funktioner.
- Inkludera std-namnområdet i vår kod för att använda dess klasser utan att anropa det.
- Skapa en klass som heter ClassA.
- Använd modifieraren för offentlig åtkomst för att markera den medlem vi håller på att skapa som allmänt tillgänglig.
- Skapa en konstruktor för klassen.
- Text att skriva ut på konsolen när konstruktorn anropas. Änden är en C++ nyckelord, vilket betyder slutrad. Den flyttar muspekaren till nästa rad.
- Slutet på kroppen av klasskonstruktören.
- Skapa en destruktör för klassen.
- Text att skriva ut på konsolen när förstöraren anropas. Änden är en C++ nyckelord, vilket betyder slutrad. Den flyttar muspekaren till nästa rad.
- Slutet på destruktörens kropp.
- Slutet av klassens kropp.
- Anropa main()-funktionen. Programlogiken bör läggas till i kroppen av denna funktion.
- Skapa ett klassobjekt och ge det namnet a. Konstruktören kommer att kallas.
- Skapa en heltalsvariabel med namnet p och tilldela den värdet 1.
- Skapa ett if-satsblock med variabeln p.
- Skapa ett klassobjekt och ge det namnet b. Förstöraren kommer att kallas.
- Slutet på brödtexten i if-satsen.
- Slutet på huvuddelen av funktionen main().
Sammanfattning
- C++ är objektorienterad.
- Klasser utgör huvuddragen i C++ som gör den objektorienterad.
- A C++ klass kombinerar data och metoder för att manipulera data till en.
- En klass är en ritning för ett objekt.
- Klasser bestämmer formen på ett objekt.
- Data och metoder som finns i en klass kallas klassmedlemmar.
- För att komma åt klassmedlemmar bör du använda en instans av klassen.
- För att skapa en klass använder vi nyckelordet klass.
- Klassmedlemsfunktionerna kan definieras i eller utanför en klass.








