Standardkonstruktor und Standardschlüsselwort in C++

Suraj P 12 Oktober 2023
Standardkonstruktor und Standardschlüsselwort in C++

Dieser Artikel befasst sich mit Standardkonstruktoren in C++ und dem neu eingeführten Schlüsselwort default.

Lassen Sie uns zunächst etwas über den Standardkonstruktor in C++ lernen. Der Standardkonstruktor ist eine spezielle Art von Konstruktor, der keine Argumente hat und verwendet wird, um Standardwerte für die Datenmember einer Klasse festzulegen.

Beispiel:

class demo {
  int age;
  int id;

 public:
  demo() {
    age = 10;
    id = 1;
  }
};

Schlüsselwort Default und Standardfunktion in C++

Die Version C++ 11 führte eine neue Form der Funktionsdeklaration ein, um die Standardfunktionen mit Hilfe des Bezeichners =default explizit zu deklarieren. Wir können eine Standardfunktion explizit deklarieren, indem wir diese am Ende der Funktionsdeklaration anhängen.

Das explizite Festlegen einer Funktion als Standard hat Vorteile, da der Compiler gezwungen wird, die Standardimplementierung zu generieren. Und in puncto Effizienz sind sie besser als die manuell implementierten Funktionen.

Wenn Sie beispielsweise einen parametrisierten Konstruktor in einer Klasse erstellen, erstellt oder fügt der Compiler keinen Standardkonstruktor im Programm hinzu. In diesen Fällen können wir das =default verwenden, um einen Standardkonstruktor zu erstellen.

Beispielcode:

#include <bits/stdc++.h>
using namespace std;

class demo {
 public:
  int x;

  demo(int temp)  // parameterized constructor
  {
    x = temp;
  }

  demo() = default;
};

int main() {
  demo d;  // uses default constructor

  demo d2(200);  // uses parameterized constructor
}

Wir können sehen, dass wir nach dem parametrisierten Konstruktor den Bezeichner =default verwendet haben, um den Compiler zu zwingen, eine Standardversion des Konstruktors zu erstellen. Und wir können beobachten, dass wir bei Verwendung von =default den Körper unseres Konstruktors nicht angeben müssen.

Ein weiterer Grund für die Verwendung von =default gegenüber der Verwendung von {} (leerer Körper) der Funktion ist, dass dies die Lesbarkeit des Codes verbessert.

Beim Umgang mit dem Bezeichner =default lautet eine Regel, dass die Funktion kein Default-Argument haben sollte. Nur spezielle Elementfunktionen wie Standardkonstruktor, Kopierkonstruktor oder Destruktor können standardmäßig verwendet werden.

Beispielcode:

#include <bits/stdc++.h>
using namespace std;

class demo {
 public:
  int add() = default;

  demo(float, float) = default;

  demo(int = 0) = default;
};

int main() {
  demo d2(200, 300);  // uses parameterized constructor
}

Ausgang:

[Error] 'int demo::add()' cannot be defaulted
[Error] 'demo::demo(float, float)' cannot be defaulted
[Error] 'demo::demo(int)' cannot be defaulted

Der obige Grund funktioniert nicht, weil die erste Funktion und die zweite Funktion add() und demo(float,float) keine spezielle Elementfunktion sind und die dritte Funktion demo(int = 0) welche hat Standardargument. Diese Funktionen können also nicht mit =default voreingestellt werden; Daher erhalten wir den Kompilierungsfehler.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - C++ Constructor