HOWTO · C++

Verwenden von Standardparametern für Funktionen in C++

Dieser Artikel zeigt, wie Standardparameter für Funktionen in C++ verwendet werden

In diesem Artikel werden verschiedene Methoden zur Verwendung von Standardparametern für Funktionen in C++ erläutert.

Verwenden Sie Standardparameter, um eine Funktion in C++ zu definieren

Das Konzept der Standardparameter ermöglicht es, Standardargumentwerte in einer Funktionsdefinition anzugeben, die verwendet wird, falls der Benutzer an seiner Stelle kein Argument übergibt. Daher können Funktionen optionale Argumente haben, die intern einen Standardwert verwenden können, um einige Objekte während des Funktionsblocks zu initialisieren. Standardparameter werden in einem Funktionsprototyp nach jedem Argumentnamen mit dem Symbol = und dem entsprechenden Wert angegeben. Beispielsweise implementiert das folgende Codefragment eine Funktionsvorlage sumNumbers, die höchstens vier Zahlen summieren kann. Der Benutzer muss jedoch nicht alle vier Werte angeben. Im Gegenteil, nur zwei ganze Zahlen reichen für die Operation aus.

#include <iostream>
#include <string>
#include <utility>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
T sumNumbers(T x, T y, T z = 0, T w = 0) {
  return (x + y + z + w);
}

int main() {
  vector<int> vec = {1, 4, 8, 16, 20, 24, 28, 32};

  for (size_t i = 0; i < vec.size(); ++i) {
    cout << sumNumbers(vec[i], vec[i + 1]) << ": ";
  }
  cout << endl;

  for (size_t i = 0; i < vec.size(); ++i) {
    cout << sumNumbers(vec[i], vec[i + 1], vec[i + 2]) << ": ";
  }
  cout << endl;

  for (size_t i = 0; i < vec.size(); ++i) {
    cout << sumNumbers(vec[i], vec[i + 1], vec[i + 2], vec[i + 3]) << ": ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

5: 12: 24: 36: 44: 52: 60: 32
13: 28: 44: 60: 72: 84: 60: 32:
29: 48: 68: 88: 104: 84: 60: 4145:

Standardparameter zur Implementierung von Klassenkonstruktoren in C++ verwenden

Ein weiteres nützliches Szenario, in dem das Konzept der Standardparameter verwendet werden kann, ist der Klassenkonstruktor. Manchmal müssen die Klassenkonstruktoren einige Datenelemente mit Standardwerten initialisieren, wenn der Benutzer die Argumente nicht bereitstellt. Wir können einen Konstruktor mit den Standardparametern implementieren, der einen anderen Konstruktor mit Standardwerten aufruft, wie im folgenden Beispielcode gezeigt.

#include <iostream>
#include <string>
#include <utility>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

class MyClass {
  string name;
  int height;
  int width;

 public:
  MyClass(string s, int h, int w) : name(std::move(s)), height(h), width(w) {}
  MyClass() : MyClass("", 0, 0) {}
  explicit MyClass(string s) : MyClass(std::move(s), 0, 0) {}

  void printMyClass() {
    cout << "name: " << name << endl
         << "height: " << height << endl
         << "width: " << width << endl;
  }
};

int main() {
  MyClass M1;
  MyClass M2("Jay", 12, 103);

  M1.printMyClass();
  cout << endl;
  M2.printMyClass();

  return EXIT_SUCCESS;
}

Ausgabe:

name:
height: 0
width: 0


name: Jay
height: 12
width: 103