C++ Constructor Initialisatielijst: Waarom en Hoe u Het Gebruikt
Bij het instantiëren van objecten, behandelen constructors vaak de initialisatie van lidvariabelen. Voor dergelijke leden biedt een initialisatielijst voor constructors een afgekorte en efficiënte manier om ze te initialiseren voordat de constructor-body wordt uitgevoerd. Naast prestaties is het soms ook verplicht vanwege const-variabelen of leden van een basisklasse.
Wat is een Constructor Initialisatielijst?
Een constructor initialisatielijst is een procedure om lidvariabelen direct te initialiseren, dus er is geen standaardconstructor die wordt gekopieerd en daarna toegewezen.
Syntaxis
De volgende syntaxis voor initialisatie van constructorlijst is als volgt:
ClassName(type1 param1, type2 param2) : member1(param1), member2(param2) {
// Constructor body
}
Hier worden member1 en member2 geïnitialiseerd met param1 en param2 voordat de constructor-body draait.
Voorbeeld van Constructor Initialisatielijst
Hier is een eenvoudig voorbeeld dat demonstreert hoe een initialisatielijst te gebruiken.
#include <iostream>
#include <string>
class Student {
public:
Student(const std::string& name, int age) : name(name), age(age) {}
void display() const {
std::cout << "Naam: " << name << ", Leeftijd: " << age << "\n";
}
private:
std::string name;
int age;
};
int main() {
Student s("Navya", 20);
s.display();
return 0;
}
Uitvoer
Naam: Navya, Leeftijd: 20
Waarom Constructor Initialisatielijsten Gebruiken?
- Om standaardinitialisatie gevolgd door hertoewijzing te vermijden, om tijd en resources te besparen.
- Het is verplicht voor bepaalde typen const-variabelen, referentieleden, en basisklasseleden.
- Het houdt alle initialisatielogica op één plek, gescheiden van de constructor-body.
Speciale Gevallen
In het volgende bespreken we enkele speciale gevallen voor constructor initialisatielijst:
Const of Referentie Leden
Const-variabelen en referentieleden kunnen niet opnieuw toegewezen worden, dus ze moeten worden geïnitialiseerd in een initialisatielijst,
class Config {
public:
Config(const std::string& product, const int & model) : product(product), model(model) {}
private:
const std::string product;
const int & model;
};
Basisklasse Initialisatie
Wanneer een afgeleide klasse erft van een basisklasse, kunt u een initialisatielijst gebruiken om de basisklasse constructor aan te roepen,
class Base {
public:
Base(int value) : baseValue(value) {}
protected:
int baseValue;
};
class Derived : public Base {
public:
Derived(int value, int extra) : Base(value), extraValue(extra) {}
private:
int extraValue;
};
C Taal
- Coded UI Test Automatiseringsframework: Een Uitgebreide Beginner's Gids
- Uitgebreide Handleiding voor het Opzetten van uw C++ Ontwikkelomgeving
- C Sleutelwoorden & Identifiers: Een Praktische Gids
- C++ Variabelentypen Uitgelegd: Geheugen, Limieten en Operaties
- malloc vs calloc: Belangrijkste verschillen uitgelegd met praktische voorbeelden
- C Bestands I/O Beheersen: Bestanden Maken, Openen, Lezen, Schrijven en Sluiten met Vertrouwen
- Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
- Typeconversie in C# Begrijpen: Impliciete & Expliciete Casting Uitgelegd
- Variabelen in C# Begrijpen: Typen, Opslag en Gebruik
- Method overloading in C#: concepten, voorbeelden en best practices
- C++ while en do-while loops: herhaling in je code beheersen