C++ のデフォルト コンストラクタとデフォルト キーワード

Suraj P 2023年10月12日
C++ のデフォルト コンストラクタとデフォルト キーワード

この記事では、C++ のデフォルト コンストラクターと、新しく導入されたキーワード default について説明します。

まず、C++ のデフォルト コンストラクターについて学びましょう。 既定のコンストラクターは、引数を持たない特別な種類のコンストラクターであり、クラスのデータ メンバーに既定値を設定するために使用されます。

例:

class demo {
  int age;
  int id;

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

C++ の Default キーワードとデフォルト関数

C++ 11 バージョンでは、=default 指定子を使用してデフォルト関数を明示的に宣言する新しい形式の関数宣言方法が導入されました。 関数宣言の最後に this を追加することで、デフォルトの関数を明示的に宣言できます。

関数を明示的にデフォルトにすることには、コンパイラにデフォルトの実装を強制的に生成させるという利点があります。 また、効率の点では、手動で実装された機能よりも優れています。

たとえば、クラス でパラメーター化されたコンストラクターを作成する場合、コンパイラーはプログラムで既定のコンストラクターを作成または追加しません。 そのような場合、=default を使用してデフォルトのコンストラクターを作成できます。

コード例:

#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
}

パラメーター化されたコンストラクターの後に、=default 指定子を使用して、コンパイラーにコンストラクターのデフォルト バージョンを強制的に作成させていることがわかります。 また、=default を使用すると、コンストラクターの本体を指定する必要がないことがわかります。

関数の {} (空の本体) を使用するよりも =default を使用するもう 1つの理由は、コードの可読性を向上させることです。

=default 指定子を扱うとき、1つの規則は、関数がデフォルトの引数を持ってはならないということです。 既定のコンストラクター、コピー コンストラクター、デストラクターなどの特別なメンバー関数のみを既定値にすることができます。

コード例:

#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
}

出力:

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

最初の関数と 2 番目の関数 add() および demo(float,float) は特別なメンバー関数ではなく、3 番目の関数 demo(int = 0) にはいくつかのメンバー関数があるため、上記の理由は機能しません。 デフォルト引数。 したがって、これらの関数は =default を使用してデフォルトにすることはできません。 したがって、コンパイルエラーが発生します。

著者: 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

関連記事 - C++ Constructor