C++コンストラクタ完全ガイド:デフォルト、パラメータ付き、コピーの違いと実例
C++ コンストラクタを理解する
このチュートリアルでは、C++コンストラクタ——それが何で、なぜ重要で、デフォルト・パラメータ付き・コピーコンストラクタをどう実装するか——を明確な実例で解説します。
コンストラクタは、オブジェクトがインスタンス化されると自動的に実行される特殊なメンバ関数です。C++では、コンストラクタはクラスと同じ名前を持ち、戻り値型を指定しません。
class Wall {
public:
// コンストラクタ
Wall() {
// 初期化コード
}
};
コンストラクタは以下を満たす必要があります:
- クラスと同じ名前を持つ
- 戻り値型を宣言しない
- アクセス可能(通常
public)
デフォルトコンストラクタ
パラメータを持たないコンストラクタを デフォルトコンストラクタ と呼びます。上記の Wall() がその例です。
実例 1: デフォルトコンストラクタ
// デフォルトコンストラクタのデモ
#include <iostream>
using namespace std;
class Wall {
private:
double length;
public:
// デフォルトコンストラクタ
Wall() {
length = 5.5;
cout << "Creating a wall." << endl;
cout << "Length = " << length << endl;
}
};
int main() {
Wall wall1;
return 0;
}
出力
Creating a Wall Length = 5.5
wall1 がインスタンス化されると、デフォルトコンストラクタが length を 5.5 に設定し、メッセージを出力します。
パラメータ付きコンストラクタ
パラメータ付きコンストラクタは、オブジェクト作成時にメンバデータを初期化するための引数を受け取ります。オブジェクトの状態を設定する推奨方法です。
実例 2: パラメータ付きコンストラクタ
// パラメータ付きコンストラクタで壁の面積を計算
#include <iostream>
using namespace std;
class Wall {
private:
double length;
double height;
public:
// パラメータ付きコンストラクタ
Wall(double len, double hgt) {
length = len;
height = hgt;
}
double calculateArea() {
return length * height;
}
};
int main() {
Wall wall1(10.5, 8.6);
Wall wall2(8.5, 6.3);
cout << "Area of Wall 1: " << wall1.calculateArea() << endl;
cout << "Area of Wall 2: " << wall2.calculateArea();
return 0;
}
出力
Area of Wall 1: 90.3 Area of Wall 2: 53.55
コンストラクタが渡された値を length と height に代入し、calculateArea() で壁の面積を計算できるようにしています。
コピーコンストラクタ
コピーコンストラクタは、既存オブジェクトの完全なコピーとして新しいオブジェクトを作成します。同タイプの別オブジェクトから初期化されるときに呼び出されます。
実例 3: コピーコンストラクタ
#include <iostream>
using namespace std;
class Wall {
private:
double length;
double height;
public:
// パラメータ付きコンストラクタ
Wall(double len, double hgt) {
length = len;
height = hgt;
}
// コピーコンストラクタ
Wall(Wall &obj) {
length = obj.length;
height = obj.height;
}
double calculateArea() {
return length * height;
}
};
int main() {
Wall wall1(10.5, 8.6);
Wall wall2 = wall1; // コピーコンストラクタを呼び出し
cout << "Area of Wall 1: " << wall1.calculateArea() << endl;
cout << "Area of Wall 2: " << wall2.calculateArea();
return 0;
}
出力
Area of Wall 1: 90.3 Area of Wall 2: 90.3
コピーコンストラクタが wall1 から wall2 へ length と height をコピーし、両オブジェクトが同一の状態を持つようにしています。
C言語
- C# コンストラクター:種類、例、高度なパターン
- C#コンストラクタオーバーロード完全ガイド:柔軟なクラス設計
- C++データ型完全ガイド:基本型、修飾子、ベストプラクティス
- C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
- C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス
- C++クラステンプレート完全ガイド:実践的なジェネリックプログラミング
- C++プログラミング言語:概要と主要機能
- C++定数とリテラル完全解説:型、構文、ベストプラクティス
- C++演算子完全ガイド:種類、使い方、ベストプラクティス
- Javaコンストラクタをマスター:種類、使い方、実践例
- Javaコンストラクタ完全理解:初期化とベストプラクティス