Grundlagen zu Ctors & Dtors
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 10 von 104.
Ein Konstruktor ist eine spezielle Methode, die automatisch ausgeführt wird, wenn ein Objekt erstellt wird. Ein Destruktor wird ausgeführt, wenn das Objekt zerstört wird.
Standardkonstruktor
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};Parametrisierter Konstruktor
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}Konstruktor-Überladung — mehrere Konstruktoren
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};Destruktor — wird ausgeführt, wenn das Objekt zerstört wird
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};Erstellen von Objekten mit verschiedenen Konstruktoren
Book book1; // Standardkonstruktor
Book book2("Harry Potter"); // Ein Parameter
Book book3("1984", 328); // Zwei ParameterKonstruktoren haben denselben Namen wie die Klasse ohne Rückgabetyp. Destruktoren verwenden ~ClassName() und werden automatisch in umgekehrter Reihenfolge ihrer Erstellung aufgerufen, wenn Objekte den Gültigkeitsbereich verlassen.
Aufgabe
MittelErstellen Sie eine Product Klasse mit drei überladenen Konstruktoren und einem Destruktor:
- 3-Parameter-Konstruktor: name, price, stock
- 2-Parameter-Konstruktor: name, price (stock = 0)
- Standardkonstruktor: name = "Unknown", price = 0, stock = 0
- Destruktor: gibt
"Destroying: <name>"aus
Spickzettel
Ein Konstruktor ist eine spezielle Methode, die automatisch ausgeführt wird, wenn ein Objekt erstellt wird. Ein Destruktor wird ausgeführt, wenn das Objekt zerstört wird.
Standardkonstruktor — initialisiert mit Standardwerten:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};Parametrisierter Konstruktor — akzeptiert Parameter:
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}Konstruktor-Überladung — mehrere Konstruktoren mit unterschiedlichen Parametern:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};Destruktor — wird ausgeführt, wenn das Objekt zerstört wird, verwendet ~ClassName():
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};Objekte erstellen mit verschiedenen Konstruktoren:
Book book1; // Default constructor
Book book2("Harry Potter"); // One parameter
Book book3("1984", 328); // Two parametersKonstruktoren haben denselben Namen wie die Klasse und keinen Rückgabetyp. Destruktoren werden automatisch in umgekehrter Reihenfolge der Erstellung aufgerufen, wenn Objekte ihren Gültigkeitsbereich verlassen.
Probier es selbst
#include <iostream>
#include "Product.h"
int main() {
std::string name;
int price, stock;
std::getline(std::cin, name);
std::cin >> price >> stock;
Product product1(name, price, stock);
Product product2("Keyboard", 79);
Product product3;
std::cout << "Product 1: " << product1.getName() << " - $" << product1.getPrice() << " (Stock: " << product1.getStock() << ")" << std::endl;
std::cout << "Product 2: " << product2.getName() << " - $" << product2.getPrice() << " (Stock: " << product2.getStock() << ")" << std::endl;
std::cout << "Product 3: " << product3.getName() << " - $" << product3.getPrice() << " (Stock: " << product3.getStock() << ")" << std::endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienC++ Build & KompilierungHeader-Dateien & QuelldateienNamensräume & GültigkeitsbereicheEinführung in OOP in C++Klassen vs. ObjekteDer 'this'-PointerMethoden (Elementfunktionen)Attribute (Datenelemente)Grundlagen zu Ctors & DtorsRückblick - Einfacher Taschenrechner4Klasseneigenschaften
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen & KlassenZusammenfassung - Bankkonto-Manager7Vererbung
Grundlagen der VererbungZugriffsstufen bei VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick - Mitarbeiter-Hierarchie2Speicherverwaltung
Stack vs. Heap SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Smart Pointers in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsspezifizierer in C++Zugriffsspezifizierer im DetailInformation HidingStruct vs. ClassVerschachtelte & innere KlassenRückblick - Studentenverwaltungssystem8Polymorphie
Kompilierzeit- vs. Laufzeit-PolymorphieFunktionsüberladungVirtuelle Funktionen – WiederholungRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIZusammenfassung – Formen-Rechner3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorVerschiebekonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktoren im DetailRule of Three / Five / ZeroZusammenfassung - String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladen der [] und () OperatorenTypumwandlungsoperatorenRückblick - Matrix-Klasse9Templates
FunktionstemplatesKlassentemplatesTemplate-SpezialisierungVariadische TemplatesSFINAE & Type Traits GrundlagenRückblick - Generische Container