C++のコンテナシップ(クラスの包含)とは?仕組みとサンプルコードを解説
このチュートリアルでは、C++における「コンテナシップ(containership:クラスの包含)」について、具体的なプログラム例を通じて解説します。
コンテナシップとは
あるクラスの中に、別のクラスのオブジェクトがメンバとして含まれている関係のことをコンテナシップ(包含)と呼びます。
このとき、内側に含まれるクラスを「被包含クラス(contained class)」、それを保持している外側のクラスを「コンテナクラス(container class)」と呼びます。
これは「has-a(〜を持っている)」の関係とも呼ばれ、継承(is-a 関係)とは異なる形でクラスを再利用するための重要な手法です。たとえば、「車(Car)はエンジン(Engine)を持っている」といった設計は、コンテナシップによって自然に表現できます。
サンプルコード
以下の例では、second クラス(コンテナクラス)が first クラス(被包含クラス)のオブジェクトをメンバとして持っています。
#include <iostream>
using namespace std;
class first {
public:
first() {
cout << "Hello from first class\n";
}
};
// コンテナクラス
class second {
first f; // 被包含クラスのオブジェクト
public:
// コンストラクタ
second() {
cout << "Hello from second class\n";
}
};
int main() {
second s;
return 0;
}
実行結果
Hello from first class Hello from second class
出力のポイント
注目すべきは出力の順序です。main 関数で second クラスのオブジェクト s を生成すると、まずそのメンバである first f; のコンストラクタが先に呼ばれ、その後に second クラス自身のコンストラクタが実行されます。
つまり、C++ではメンバオブジェクトの初期化が、コンテナクラス自身のコンストラクタ本体よりも先に行われるという規則があります。この動作を理解しておくことは、複数のクラスを組み合わせた設計において非常に重要です。
-
【C++入門】多重継承の基本と実装方法をわかりやすく解説
多重継承(Multiple Inheritance)とは多重継承とは、ひとつのクラスが複数の基底クラス(親クラス)から派生する仕組みのことです。多重継承を利用することで、派生クラスは複数の基底クラスが持つ機能やデータメンバをまとめて引き継ぐことができます。これはC++に代表されるオブジェクト指向プログラミング言語における重要な機能のひとつです。多重継承の構造を表した図が以下になります。C++で多重継承を実装するサンプルプログラムここでは、C++で多重継承を実装したサンプルプログラムを紹介します。クラスCが、クラスAとクラスBの2つのクラスを同時に継承する例です。サンプルコード#include
-
C++のローカルクラスとは?特徴・制約と実装例をわかりやすく解説
ローカルクラスとは C++において、関数の中で宣言されたクラスは「ローカルクラス」と呼ばれます。これは、そのクラスが定義された関数の内部でのみ有効であるためです。 まず、ローカルクラスの基本的な構造を見てみましょう。 #include<iostream> using namespace std; void func() { class LocalClass { }; } int main() { return 0; } 上記の例では、関数 func() の中で LocalClass が定義されています。このように関数の内部で宣言されたクラスが、ローカルクラス