C++ Constructor-initialisatielijst:waarom en hoe het te gebruiken
Bij het instantiëren van objecten verzorgen constructors vaak de initialisatie van lidvariabelen. Voor dergelijke leden biedt een initialisatielijst voor constructors een verkorte en efficiënte manier om hun initialisatie uit te voeren voordat de body van de constructor wordt uitgevoerd. Naast de prestaties is het soms ook verplicht vanwege const-variabelen of leden van een basisklasse.
Wat is een constructorinitialisatielijst?
Een constructor-initialisatielijst is een procedure om lidvariabelen rechtstreeks te initialiseren. Er is dus geen standaardconstructor die wordt gekopieerd en vervolgens toegewezen.
Syntaxis
De volgende syntaxis voor het initialiseren van de 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 constructorbody wordt uitgevoerd.
Voorbeeld van constructorinitialisatielijst
Hier is een eenvoudig voorbeeld dat laat zien hoe u een initialisatielijst gebruikt.
#include <iostream>
#include <string>
class Student {
public:
Student(const std::string& name, int age) : name(name), age(age) {}
void display() const {
std::cout << "Name: " << name << ", Age: " << age << "\n";
}
private:
std::string name;
int age;
};
int main() {
Student s("Navya", 20);
s.display();
return 0;
}
Uitvoer
Name: Navya, Age: 20
Waarom constructorinitialisatielijsten gebruiken?
- Om standaardinitialisatie gevolgd door nieuwe toewijzing te voorkomen, om tijd en middelen te besparen.
- Het is verplicht voor bepaalde typen const-variabelen, referentieleden en leden van de basisklasse.
- Het bewaart alle initialisatielogica op één plek, gescheiden van de constructorbody.
Speciale gevallen
Hieronder zullen we enkele speciale gevallen bespreken voor de initialisatielijst van de constructor −
Const- of referentieleden
Const-variabelen en referentieleden kunnen niet opnieuw worden toegewezen, dus moeten ze 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;
};
Initialisatie van basisklasse
Wanneer een afgeleide klasse erft van een basisklasse, kunt u een initialisatielijst gebruiken om de basisklasseconstructor 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
- C breken en doorgaan
- C - Bitvelden
- Soorten door de gebruiker gedefinieerde functies in C-programmering
- C Bestandsverwerking
- C# hashtabel met voorbeelden
- C++ overbelasting (operator en functie)
- C Pass-adressen en -wijzers
- Beheers geneste lussen in C#:For, While en Do-While uitgelegd
- Karakteraanwijzers en functiegebruik beheersen in C
- C# Windows Forms-toepassingshandleiding met voorbeeld
- C opsommingen