C++コンストラクタ:デフォルト引数で柔軟なオブジェクト生成を実現
コンストラクタはクラスの特殊なメンバ関数で、オブジェクト生成時に自動的に呼び出されます。オブジェクトを値やデフォルト設定で初期化するために使用されます。
一方、C++のデフォルト引数を使用すると、関数やコンストラクタのパラメータにデフォルト値を指定できます。
デフォルト引数を持つコンストラクタ
デフォルト引数を持つコンストラクタとは、オプションのパラメータを使用してオブジェクトを生成できるコンストラクタです。パラメータにデフォルト値が提供されており、ユーザーが値を渡さない場合はそのデフォルト値が使用されます。
構文
デフォルト引数を持つコンストラクタの構文は以下の通りです:
class ClassName { public: ClassName(parameter_Type parameter_Name = default_Value, parameter_Type2 parameter_Name2 = default_Value2); };
- コンストラクタ名はクラス名と同じ
- 1つ以上のパラメータにデフォルト値を指定
- ユーザーが値を渡さない場合、デフォルト値が使用される
デフォルト引数を持つコンストラクタの例
以下はデフォルト引数を持つコンストラクタの例です:
#include <iostream> using namespace std; // デフォルト引数を持つ関数 void printMessage(string message = "Hello, Tutorialspoint Learner") { cout << message << endl; } int main() { // 引数なしで関数呼び出し printMessage(); // デフォルトメッセージ "Hello, Tutorialspoint Learner" が出力 // カスタム引数で関数呼び出し printMessage("Hi, there!"); // カスタムメッセージ "Hi, there!" が出力 return 0; }
出力
Hello, Tutorialspoint Learner Hi, there!
解説
- デフォルト値 "Hello, Tutorialspoint Learner" を持つパラメータを持つ関数 printMessage() を定義
- main()で printMessage() を引数なしで呼び出すと、デフォルト引数 "Hello, Tutorialspoint Learner" が使用される
- printMessage("Hi, there!") のように明示的に値を渡すと、デフォルト引数が上書きされる
複数のデフォルト引数を持つコンストラクタ
複数のデフォルト引数を持つコンストラクタでは、複数のパラメータにデフォルト値を指定できます。これにより、引数のさまざまな組み合わせを渡せるようになり、柔軟性が向上します。
例
以下は複数のデフォルト引数を持つコンストラクタの例です:
#include <iostream> using namespace std; class Box { public: int length, width, height; // 複数のデフォルト引数を持つコンストラクタ Box(int l = 5, int w = 10, int h = 2) { // length, width, heightのデフォルト値 length = l; width = w; height = h; } void display() { cout << "Length: " << length << ", Width: " << width << ", Height: " << height << endl; } }; int main() { // 異なる数の引数でオブジェクト生成 Box box1; Box box2(15); Box box3(15, 20); Box box4(15, 20, 25); // オブジェクトの値を表示 box1.display(); box2.display(); box3.display(); box4.display(); return 0; }
出力
Length: 5, Width: 10, Height: 2 Length: 15, Width: 10, Height: 2 Length: 15, Width: 20, Height: 2 Length: 15, Width: 20, Height: 25
解説
- クラスBoxは3つのパブリックメンバ変数(length, width, height)を持ち、コンストラクタ Box(int l = 5, int w = 10, int h = 2) で3つすべてのパラメータにデフォルト値を設定
- Box box1; では引数を指定しないため、デフォルト値で初期化され "Length: 5, Width: 10, Height: 2" となる
- Box box2(15); ではlengthのみ15を指定、widthとheightはデフォルト値を使用
- Box box3(15, 20); ではlengthとwidthを指定、heightはデフォルト値を使用
デフォルト引数を持つコンストラクタの主な特徴
通常の関数と似ていますが、オブジェクト生成時により柔軟性と利便性を提供します。主な特徴は以下の通りです。
1. パラメータのデフォルト値とオブジェクト生成の柔軟性
コンストラクタは1つ以上のパラメータにデフォルト値を持て、呼び出し側が引数を渡さない場合に使用され、複数の方法でオブジェクトを生成可能。
2. 複数のコンストラクタオーバーロードを回避
引数の組み合わせごとにコンストラクタをオーバーロードするとコードが膨らみますが、デフォルト引数なら1つのコンストラクタでさまざまなケースを自動的に処理できます。
3. デフォルト引数の順序
複数のデフォルト値パラメータがある場合、右側からデフォルト値を指定し始めたら、途中でデフォルト値のないパラメータを置くことはできません。
構文(無効な例)
Box(int l = 1, int w); // 無効: 'l'にデフォルトがあるのに'w'にない
4. constメンバとデフォルト引数の併用
クラスにconstメンバがある場合、コンストラクタでデフォルト引数を提供することで初期化を容易にできます。
構文
class Box { public: const int length, width; Box(int l = 5, int w = 10) : length(l), width(w) {} };
このコンストラクタはデフォルト引数(length = 5, width = 10)を使用してconstメンバを初期化します。
C言語
- C# 面接質問トップ50 & 回答 (2021年版) – 初心者から経験豊富な開発者まで
- C#配列マスター:宣言、初期化、整数コレクションの操作
- C 言語関数マスター: 再帰とインライン関数の実践例
- C言語のrealloc()活用ガイド:構文、ベストプラクティス、実例
- C++メモリ管理の極意:newとdeleteのエキスパート活用法
- C#の例外処理:try/catch/finally/throwとベストプラクティス
- Guru99:包括的なオンラインチュートリアルとビジネスソフトウェアレビュー
- C#のループ完全ガイド:for、while、do-while、制御文
- C# while 文と do-while 文をマスターする:構文、例、ベストプラクティス
- C++動的メモリ管理完全解説:スタックとヒープ、new/delete
- C#データベース接続チュートリアル:SQL Server接続とCRUD操作の実践