C++ Klasse en object met voorbeeld

⚡ Slimme samenvatting

Klassen en objecten in C++ Ze vormen de basis van objectgeoriënteerd programmeren, waarbij een klasse een blauwdruk definieert van gegevens en lidfuncties, en een object een concrete instantie is die is gecreëerd op basis van die blauwdruk.

  • 🔷 Klasopzet: A C++ Een klasse bundelt dataleden en lidfuncties in één door de gebruiker gedefinieerd type.
  • 🔑 Toegangsmodifiers: De sleutelwoorden privé, openbaar en beschermd bepalen waar leden van een klasse toegankelijk zijn.
  • 🧱 Objectinstantiatie: Een object wordt gemaakt op basis van een klasse met behulp van de syntaxis klassenaam objectnaam.
  • 👉 Toegang voor leden: De puntoperator geeft toegang tot openbare leden, terwijl lidfuncties de opgeslagen gegevens manipuleren.
  • ⚙️ Constructeurs: Constructors initialiseren objecten automatisch, en destructors geven ze vrij wanneer ze buiten het bereik vallen.
  • 🤖 AI-assistentie: GitHub Copilot en vergelijkbare AI-assistenten genereren klassedefinities en constructors op basis van een korte opmerking.

C++ Klasse en object

Wat is een klasse?

A C++ klasse combineert gegevens en methoden voor het manipuleren van de gegevens in één. Klassen bepalen ook de vormen van objecten. De gegevens en methoden in een klasse worden klasseleden genoemd. Een klasse is een door de gebruiker gedefinieerd gegevenstype. Om toegang te krijgen tot de klasleden, gebruiken we een exemplaar van de klas. Je kunt een klasse zien als een blauwdruk voor een object.

Een klasse kan dienen als prototype voor een huis. Het toont de locatie en afmetingen van deuren, ramen, verdiepingen, enzovoort. Aan de hand van deze beschrijvingen kunnen we een huis bouwen. Het huis wordt dan het object. Het is mogelijk om vanuit het prototype meerdere huizen te creëren. Evenzo is het mogelijk om vanuit een klasse meerdere objecten te creëren.

C++ klasse als blauwdruk voor objecten

In de bovenstaande afbeelding hebben we een prototype voor één huis. Van dit prototype hebben we twee huizen met verschillende kenmerken gemaakt.

Met het idee van een klasse als blauwdruk in gedachten, is de volgende stap om te bekijken hoe een klasse in code wordt gedeclareerd.

Klasseverklaring

In C++Een klasse wordt gedefinieerd met het trefwoord `class`. Dit moet gevolgd worden door de klassenaam. De inhoud van de klasse wordt vervolgens tussen accolades { } geplaatst.

Syntaxis

class class-name
   {
   // data
   // functions
   };
  • De naam van de klasse Dit is de naam die aan de klasse moet worden toegewezen.
  • De gegevens Dit zijn de gegevens voor de klasse, die normaal gesproken als variabelen worden gedeclareerd.
  • De functies Dit zijn de klassefuncties.

Het declareren van de klassenaam en de inhoud van de klasse roept vanzelfsprekend de vraag op wie elk lid mag gebruiken.

Privé- en openbare trefwoorden

Deze twee zoekwoorden ben je vast wel eens tegengekomen. Het zijn toegangsmodificatoren.

private:

Wanneer het private sleutelwoord wordt gebruikt om een ​​functie of klasse te definiëren, wordt het privé. Deze zijn alleen toegankelijk vanuit de klas.

Openbaar:

Het publieke trefwoord daarentegen maakt gegevens/functies openbaar. Deze zijn toegankelijk van buiten de klas.

Nadat een klasse bestaat, kunnen er objecten van worden gemaakt, net zoals variabelen worden gemaakt van een gegevenstype.

Objectdefinitie

Objecten worden gemaakt op basis van klassen. Klasseobjecten worden op een vergelijkbare manier gedeclareerd als variabelen. De klassenaam moet eerst komen, gevolgd door de objectnaam. Het object is van het klassetype.

Syntaxis

class-name object-name;
  • De naam van de klasse is de naam van de klasse waarvan een object moet worden gemaakt.
  • De object-naam Dit is de naam die aan het nieuwe object moet worden toegekend.

Dit proces waarbij een object uit een klasse wordt gemaakt, staat bekend als instantiatie.

Zodra een object is aangemaakt, kunnen de openbare leden ervan rechtstreeks worden benaderd via een eenvoudige operator.

Toegang tot gegevensleden

Om toegang te krijgen tot openbare leden van een klasse, gebruiken we de (.)dot operator. Dit zijn leden die gemarkeerd zijn met de openbare toegangsmodifier.

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

C++ Toegang tot openbare gegevensleden Voorbeeld 1 uitvoer

Hier is een screenshot van de code:

C++ Toegang tot openbare gegevensleden Voorbeeld 1 code

Code Uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Inclusief de std-naamruimte in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  3. Declareer een klasse met de naam Phone.
  4. Gebruik de modifier voor openbare toegang om de variabelen die we gaan maken als openbaar toegankelijk te markeren.
  5. Declareer de variabele kosten van een dubbel gegevenstype.
  6. Declareer een geheel getalvariabele met de naam slots.
  7. Einde van het klassenlichaam.
  8. De functie main() aanroepen. De programmalogica moet in de hoofdtekst worden toegevoegd.
  9. Maak een object met de naam Y6 van het type Telefoon. Dit wordt instantiatie genoemd.
  10. Maak een object met de naam Y7 van het type Telefoon. Dit wordt instantiatie genoemd.
  11. Krijg toegang tot de variabele/ledenkosten van klasse Telefoon met behulp van het object Y6. De waarde is ingesteld op 100.0. De kosten van Y6 zijn nu ingesteld op 100.0.
  12. Krijg toegang tot de variabele/ledenslots van de klasse Phone met behulp van het object Y6. De waarde is ingesteld op 2. De slots voor Y6 zijn nu ingesteld op 2.
  13. Krijg toegang tot de variabele/ledenkosten van klasse Telefoon met behulp van het object Y7. De waarde is ingesteld op 200.0. De kosten van Y7 zijn nu ingesteld op 200.0.
  14. Krijg toegang tot de variabele/ledenslots van de klasse Phone met behulp van het object Y7. De waarde is ingesteld op 2. De slots voor Y7 zijn nu ingesteld op 2.
  15. Druk de kosten van Y6 af op de console, samen met andere tekst.
  16. Druk de kosten van Y7 af op de console, samen met andere tekst.
  17. Druk het aantal slots voor Y6 af naast andere tekst.
  18. Druk het aantal slots voor Y7 af naast andere tekst.
  19. Het programma moet bij succesvolle voltooiing een waarde retourneren.
  20. Einde van de hoofdtekst van de functie main().

Openbare leden hebben toegang tot code van buitenaf, maar privéleden volgen veel strengere toegangsregels.

Wat is een privéles?

Klassenleden die als privé zijn gemarkeerd, zijn alleen toegankelijk voor functies die binnen de klas zijn gedefinieerd. Elk object of elke functie die buiten de klasse is gedefinieerd, heeft geen directe toegang tot dergelijke leden. Een lid van een privéklasse is alleen toegankelijk via de leden- en vriendenfuncties.

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

C++ privé klasselid Voorbeeld 2 uitvoer

Hier is een screenshot van de code:

C++ privé klasselid Voorbeeld 2 code

Code Uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam ClassA.
  4. Gebruik de modifier voor openbare toegang om het te maken klasselid als openbaar toegankelijk te markeren.
  5. Maak de functie met de naam set_a() waaraan één gehele waarde val moet doorgegeven worden.
  6. Maak een functie met de naam get_a().
  7. Gebruik de privétoegangsmodifier om het klasselid dat moet worden aangemaakt als privé toegankelijk te markeren.
  8. Declareer een geheel getalvariabele met de naam a.
  9. Einde van het klassenlichaam.
  10. Gebruik de klassenaam en de scope resolution operator om toegang te krijgen tot de functie get_a(). We willen definiëren wat de functie doet wanneer deze wordt aangeroepen.
  11. De functie get_a() moet de waarde van variabele a retourneren wanneer deze wordt aangeroepen.
  12. Einde van de definitie van de functie get_a().
  13. Gebruik de klassenaam en de scope resolution operator om toegang te krijgen tot de functie set_a(). We willen definiëren wat de functie doet wanneer deze wordt aangeroepen.
  14. De waarde van de variabele val toewijzen aan variabele a.
  15. Einde van de definitie van de functie set_a().
  16. Roep de functie main() aan. De programmalogica moet worden toegevoegd aan de hoofdtekst van deze functie.
  17. Maak een instantie van ClassA en geef deze de naam a.
  18. Gebruik de bovenstaande klasse-instantie en de functie set_a() om een ​​waarde van 20 toe te kennen aan de variabele a.
  19. Een stukje tekst afdrukken naast de waarde van variabele a op de console. De waarde van variabele a wordt verkregen door de functie get_a() aan te roepen.
  20. Het programma moet waarde retourneren na succesvolle voltooiing.
  21. Einde van de hoofdtekst van de functie main().

Beschermde leden bevinden zich tussen privé en publiek en voegen een belangrijke mogelijkheid toe voor erfopvolging.

Wat is een beschermde klasse?

Leden van de klas die als beschermd zijn gemarkeerd, hebben een voordeel ten opzichte van degenen die als privé zijn gemarkeerd. Ze zijn toegankelijk voor functies binnen de klasse van hun definitie. Bovendien zijn ze toegankelijk vanuit afgeleide klassen.

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

C++ protected class member Voorbeeld 3 uitvoer

Hier is een screenshot van de code:

C++ Overerving van een beveiligde klasse Voorbeeld 3 code

Code Uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam ParentClass.
  4. Gebruik de beschermde toegangsmodifier om het aan te maken klasselid als beschermd te markeren.
  5. Maak een geheel getalvariabele met de naam waarde.
  6. Einde van het klassenlichaam.
  7. Maak een nieuwe klasse met de naam ChildClass die de ParentClass erft.
  8. Gebruik de beschermde toegangsmodifier om het te maken klaslid te markeren als toegankelijk voor onderliggende klassen.
  9. Maak de functie met de naam setId() waaraan één geheel getal x moet doorgegeven worden.
  10. De waarde van de variabele x toewijzen aan de variabelewaarde.
  11. Einde van de definitie van de functie setId().
  12. Maak een functie met de naam displayValue().
  13. Druk de waarde van de variabele met de naam waarde af op de console naast andere tekst.
  14. Einde van de hoofdtekst van de functie displayValue().
  15. Einde van de hoofdtekst van de klasse ChildClass.
  16. Roep de functie main() aan. De programmalogica moet worden toegevoegd aan de hoofdtekst van deze functie.
  17. Maak een instantie van ChildClass en geef deze de naam c.
  18. Gebruik de bovenstaande klasse-instantie en de functie setId() om een ​​waarde van 21 toe te wijzen aan de variabele x.
  19. Gebruik de bovenstaande klasse-instantie om de functie displayValue() aan te roepen.
  20. Het programma moet waarde retourneren na succesvolle voltooiing.
  21. Einde van de hoofdtekst van de functie main().

Een klasse slaat niet alleen gegevens op, maar groepeert ook de functies die op die gegevens werken.

Functies van klasseleden

Functies helpen ons gegevens te manipuleren. Functies van klasseleden kunnen op twee manieren worden gedefinieerd:

  • Binnen de klassedefinitie
  • Buiten de klassedefinitie

Als een functie buiten een klassedefinitie moet worden gedefinieerd, moeten we de scope resolution operator (::) gebruiken. Deze moet worden vergezeld door de klasse- en functienamen.

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

C++ klasselidfuncties Voorbeeld 4 uitvoer

Hier is een screenshot van de code:

C++ Codevoorbeeld 4 voor lidfuncties van een klasse

Code Uitleg:

  1. Neem het iostream-headerbestand op in ons programma om de functies ervan te gebruiken.
  2. Neem het string-headerbestand op in ons programma om de functies ervan te gebruiken.
  3. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  4. Maak een klasse met de naam Guru99.
  5. Gebruik de toegangsaanpasser 'public' om de klasseleden die we gaan maken als openbaar toegankelijk te markeren.
  6. Maak een tekenreeksvariabele met de naam tutorial_name.
  7. Maak een geheel getalvariabele met de naam id.
  8. Maak een functie met de naam printname(). Deze functie is niet gedefinieerd binnen de klassedefinitie.
  9. Maak een functie met de naam printid(). Deze functie is gedefinieerd binnen de klassedefinitie. De body ervan is toegevoegd binnen de klassedefinitie.
  10. Druk de waarde van de variabele-ID af naast andere tekst op de console. Merk op dat dit is toegevoegd in de hoofdtekst van de printid()-functie. Het wordt alleen uitgevoerd als de functie printid() wordt aangeroepen.
  11. Einde van de hoofdtekst van de functie printid().
  12. Einde van het lesgedeelte Guru99.
  13. Het begin van de definitie van de functie printnaam().
  14. Druk de waarde van de variabele tutorial_name af op de console naast andere tekst. Merk op dat dit is toegevoegd in de hoofdtekst van de functie printname(). Het wordt alleen uitgevoerd als de functie printname() wordt aangeroepen.
  15. Einde van de definitie van de functie printname().
  16. Roep de functie main() aan. De programmalogica moet worden toegevoegd aan de hoofdtekst van deze functie.
  17. Maak een instantie van de klasse Guru99 en het de naam guru99 geven.
  18. Gebruik de bovenstaande instantie om een ​​waarde toe te wijzen van C++ aan de variabele tutorial_name.
  19. Gebruik de instantie guru99 om een ​​waarde van 1001 toe te wijzen aan de variabele-ID.
  20. Gebruik de instantie guru99 om de functie printname() aan te roepen.
  21. Roep de opdracht end (eindregel) op om een ​​nieuwe lege regel op de console af te drukken.
  22. Gebruik de instantie guru99 om de functie printid() aan te roepen.
  23. Het programma moet waarde retourneren na succesvolle voltooiing.
  24. Einde van de hoofdtekst van de functie main().

Twee speciale lidfuncties worden automatisch uitgevoerd wanneer een object wordt aangemaakt en wanneer het wordt vernietigd.

Constructeurs en vernietigers

Wat is een constructeur?

Constructors zijn speciale functies die objecten initialiseren. C++ samenstellers Roep een constructor aan bij het aanmaken van een object. Constructors helpen bij het toewijzen van waarden aan klasseleden. Dit gebeurt natuurlijk nadat er geheugenruimte aan hen is toegewezen.

Wat is een destructor?

Destructors helpen daarentegen klasseobjecten te vernietigen.

De constructornaam moet vergelijkbaar zijn met de klassenaam. Constructors hebben geen retourtype.

De constructor kan binnen of buiten de class body worden gedefinieerd. Als deze buiten de class body wordt gedefinieerd, moet deze worden gedefinieerd met de class name en de scope resolution operator (::).

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

C++ Constructor en destructor Voorbeeld 5 uitvoer

Hier is een screenshot van de code:

C++ Constructor en destructor: voorbeeld 5 code

Code Uitleg:

  1. Neem het iostream-headerbestand op in de code om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam ClassA.
  4. Gebruik de modifier voor openbare toegang om het lid dat we gaan maken als openbaar toegankelijk te markeren.
  5. Maak een constructor voor de klasse.
  6. Tekst die op de console moet worden afgedrukt wanneer de constructor wordt aangeroepen. Het einde is een C++ trefwoord, wat eindregel betekent. Het verplaatst de muiscursor naar de volgende regel.
  7. Einde van de hoofdtekst van de klassenconstructor.
  8. Maak een destructor voor de klas.
  9. Tekst die op de console moet worden afgedrukt wanneer de destructor wordt aangeroepen. Het einde is een C++ trefwoord, wat eindregel betekent. Het verplaatst de muiscursor naar de volgende regel.
  10. Einde van het lichaam van de destructor.
  11. Einde van het klassenlichaam.
  12. Roep de functie main() aan. De programmalogica moet worden toegevoegd aan de hoofdtekst van deze functie.
  13. Maak een klasseobject en geef het de naam a. De constructeur wordt gebeld.
  14. Maak een geheel getalvariabele met de naam p en wijs deze de waarde 1 toe.
  15. Maak een if-instructieblok met behulp van de variabele p.
  16. Maak een klasseobject en geef het de naam b. De vernietiger zal worden gebeld.
  17. Einde van de hoofdtekst van de if-instructie.
  18. Einde van de hoofdtekst van de functie main().

Veelgestelde vragen

Een klasse is een door de gebruiker gedefinieerde blauwdruk die gegevensleden en lidfuncties in één type groepeert. Een object is een concrete instantie die is opgebouwd uit die klasse en een eigen kopie bevat van de gegevens die door de blauwdruk worden beschreven.

Het belangrijkste verschil is de standaardtoegang: leden van een klasse zijn standaard privé, terwijl leden van een structuur zijn standaard openbaar. Beide ondersteunen overerving, constructors en inkapseling. C++.

C++ Het ondersteunt drie veelvoorkomende constructortypen: een standaardconstructor zonder argumenten, een geparameteriseerde constructor die waarden accepteert om leden te initialiseren, en een kopieerconstructor die een nieuw object creëert op basis van een bestaand object van dezelfde klasse.

Een friend-functie is een niet-lidfunctie die toegang krijgt tot de private en protected leden van een klasse. Deze functie wordt binnen de klasse gedeclareerd met het sleutelwoord `friend`, maar wordt daarbuiten gedefinieerd als een gewone functie.

De `this`-pointer is een impliciete pointer die beschikbaar is in elke niet-statische lidfunctie. Deze pointer wijst naar het object dat de functie heeft aangeroepen, waardoor de code kan verwijzen naar de eigen leden van dat object en naamconflicten tussen parameters en dataleden kan oplossen.

Encapsulatie bundelt data en de functies die erop werken binnen één klasse, en verbergt interne details met behulp van private leden. Openbare lidfuncties bieden een gecontroleerde interface, waardoor de data beschermd wordt tegen onbedoelde of ongeautoriseerde toegang.

Ja. AI-codeerassistenten zetten een korte prompt of opmerking om in werkende klassedefinities, inclusief dataleden, toegangsspecificaties, constructors en lidfuncties. Controleer altijd de gegenereerde toegangsniveaus en initialisatielogica voordat u de code compileert.

Ja. GitHub-copiloot Het suggereert klassedeclaraties, constructors, getters en setters terwijl je typt. Het verwerkt repetitieve boilerplate-code snel, hoewel je nog steeds de toegang tot leden, de constructorlogica en het objectgebruik moet controleren voordat je gaat compileren.

Vat dit bericht samen met: