入れ子にされた型の名前
Microsoft C++ は入れ子にされた型の宣言 (という名前の匿名サポートします。無名構造体とクラスは C++ の Microsoft の拡張機能です。無名共用体に標準です。
[::] class-name :: class-name
[::] template-id :: class-name
[::] class-name :: template-id
[::] template-id :: template template-id
:: template template-id :: template template-id
解説
上の最初のクラス名は外側のクラスを示しています ; 2 番目の内部クラスについて説明します。これらの名前はさらに入れ子にする場合があります。したがって
Outer::Inner
::Outer::Inner
::Outer::Inner::Inner2
クラスはすべての有効な名前です。クラス名の代わりにテンプレートの識別子はとしてオプションのテンプレートのキーワードを使用できます。
MyClass<int>::Inner
Outer<int>::template Inner<int>
のプログラミングの状況では入れ子にされた型を定義する意味があります。これらの型は定義されたクラス型のメンバー関数にのみ表示されます。また修飾型名を生成すること :: スコープ解決演算子 () を使用して表示することもできます。
[!メモ]
入れ子にされた型が 1 である一つの主なクラスの階層構造は入出力ストリームです。iostream ヘッダー ファイルのクラス ios の定義はiostream ライブラリでのみ使用することにより一連の列挙体が含まれています。
使用例
次の例は入れ子になったクラスを定義しています :
// nested_type_names1.cpp
class WinSystem
{
public:
class Window
{
public:
Window(); // Default constructor.
~Window(); // Destructor.
int NumberOf(); // Number of objects of class.
int Count(); // Count number of objects of class.
private:
static int CCount;
};
class CommPort
{
public:
CommPort(); // Default constructor.
~CommPort(); // Destructor.
int NumberOf(); // Number of objects of class.
int Count(); // Count number of objects of class.
private:
static int CCount;
};
};
// Initialize WinSystem static members.
int WinSystem::Window::CCount = 0;
int WinSystem::CommPort::CCount = 0;
int main()
{
}
入れ子になったクラス内で定義される名前にアクセスするには完全クラス名の構築に :: スコープ解決演算子 () を使用します。この演算子の使用は前の例の 静的 のメンバーの初期化に示します。プログラムで入れ子になったクラスを使用するにはコードを使用する :
WinSystem::Window Desktop;
WinSystem::Window AppWindow;
cout << "Number of active windows: " << Desktop.Count() << "\n";
入れ子になった匿名クラスまたは構造体は次のように定義できます :
// nested_type_names2.cpp
class Ledger
{
class
{
public:
double PayableAmt;
unsigned PayableDays;
} Payables;
class
{
public:
double RecvableAmt;
unsigned RecvableDays;
} Receivables;
};
int main()
{
}
匿名クラスはメンバー関数および静的メンバーを持たない集計である必要があります。
終了 Microsoft 固有の仕様→
[!メモ]
列挙型がクラス宣言の中で定義することもできますがはコントロールではありません ; クラス型は列挙型の宣言の中で定義することはできません。