C++のローカルクラスとは?特徴・制約と実装例をわかりやすく解説
ローカルクラスとは
C++において、関数の中で宣言されたクラスは「ローカルクラス」と呼ばれます。これは、そのクラスが定義された関数の内部でのみ有効であるためです。
まず、ローカルクラスの基本的な構造を見てみましょう。
#include<iostream>
using namespace std;
void func() {
class LocalClass {
};
}
int main() {
return 0;
}
上記の例では、関数 func() の中で LocalClass が定義されています。このように関数の内部で宣言されたクラスが、ローカルクラスと呼ばれるものです。
ローカルクラスの特徴と制約
- ローカルクラスの名前は、その関数の内部でのみ使用でき、外部からは利用できません。
- メンバ関数は、必ずクラス定義の内部で定義する必要があります。
- 静的データメンバ(staticなメンバ変数)を持つことはできませんが、静的メンバ関数を持つことは可能です。
サンプルプログラム
続いて、C++におけるローカルクラスの実際の使い方を示すプログラムを紹介します。
#include<iostream>
using namespace std;
void func() {
class LocalClass {
private:
int num;
public:
void getdata(int n) {
num = n;
}
void putdata() {
cout<<"数値:"<<num;
}
};
LocalClass obj;
obj.getdata(7);
obj.putdata();
}
int main() {
cout<<"ローカルクラスのデモ"<<endl;
func();
return 0;
}
実行結果
ローカルクラスのデモ 数値:7
プログラムの解説
このプログラムでは、クラス LocalClass が関数 func() の内部で宣言されているため、ローカルクラスとして扱われます。クラスは、private なメンバ変数 num と、その値を設定する getdata()、表示する putdata() という2つのメンバ関数を持っています。
クラス定義の後、関数 func() 内でオブジェクト obj が生成され、obj を通じて getdata() と putdata() が呼び出されます。該当するコードは以下の通りです。
void func() {
class LocalClass {
private:
int num;
public:
void getdata(int n) {
num = n;
}
void putdata() {
cout<<"数値:"<<num;
}
};
LocalClass obj;
obj.getdata(7);
obj.putdata();
}
最後に、main() 関数の中で func() を呼び出すことで、ローカルクラスの処理が実行されます。
cout<<"ローカルクラスのデモ"<<endl; func();
まとめ
ローカルクラスは、特定の関数内だけで使う補助的なクラスを定義したい場合に役立ちます。クラス名が関数の外部に漏れないため、名前の衝突を避けながら、影響範囲を狭く抑えたカプセル化を実現できるのが大きなメリットです。
-
【C++入門】多重継承の基本と実装方法をわかりやすく解説
多重継承(Multiple Inheritance)とは多重継承とは、ひとつのクラスが複数の基底クラス(親クラス)から派生する仕組みのことです。多重継承を利用することで、派生クラスは複数の基底クラスが持つ機能やデータメンバをまとめて引き継ぐことができます。これはC++に代表されるオブジェクト指向プログラミング言語における重要な機能のひとつです。多重継承の構造を表した図が以下になります。C++で多重継承を実装するサンプルプログラムここでは、C++で多重継承を実装したサンプルプログラムを紹介します。クラスCが、クラスAとクラスBの2つのクラスを同時に継承する例です。サンプルコード#include
-
C#の入れ子クラス(ネストクラス)とは?基本構文と実装例を解説
入れ子クラス(ネストクラス)とは入れ子クラス(Nested Class/ネストクラス)とは、別のクラス(外側のクラス=エンクロージングクラス)の内部で宣言されたクラスのことです。入れ子クラスは外側のクラスの一つのメンバーとして扱われ、内部クラスと外部クラスという関係性を持ちます。ただし注意が必要なのは、外側のクラスのメンバーからは、入れ子クラスのメンバーに直接アクセスできないという点です。入れ子クラスはあくまで独立した型として振る舞います。C#における入れ子クラスのコード例それでは、C#で入れ子クラスを定義する基本的なコード例を見てみましょう。以下の例では、クラス「Two」が入れ子クラスに該当