6

Localクラス、Innerクラス、Nestedクラスは、C ++では同じ意味ですか?

4

3 に答える 3

7

ローカルクラスとネストされたクラスは異なる獣です。

ネストされたクラスは、別のクラスのスコープ内で宣言されたクラスです。

ローカルクラスは関数定義内で宣言されます。

内部クラスは非標準のC++用語であるため、定義方法がわかりません。


ネストされたクラス:

ここに素晴らしいドキュメンテーションとしてのIBMドキュメンテーション。
要約する:

  • ネストされたクラスの名前は、それを囲むクラスに対してローカルです。明示的なポインター、参照、またはオブジェクト名を使用しない限り、ネストされたクラスの宣言では、型名、静的メンバー、およびそれを囲むクラスとグローバル変数の列挙子を含む、表示可能な構造のみを使用できます。
  • ネストされたクラスのメンバー関数は、通常のアクセスルールに従い、それを囲むクラスのメンバーに対する特別なアクセス権限はありません。囲んでいるクラスのメンバー関数には、ネストされたクラスのメンバーへの特別なアクセス権はありません。

ローカルクラス:ここ
での私の答えは、ローカルクラスに関連する微妙なポイントを文書化しています。

于 2011-10-24T15:39:54.650 に答える
2

C ++ 11(N3290)のドラフトの引用:

9.7ネストされたクラス宣言[class.nest]

1クラスは別のクラス内で宣言できます。別のクラス内で宣言されたクラスは、ネストされたクラスと呼ばれます。

9.8ローカルクラス宣言[class.local]

1クラスは関数定義内で宣言できます。このようなクラスはローカルクラスと呼ばれます。

C++標準で指定されている内部クラスの概念はありません。

于 2011-10-24T16:00:48.767 に答える
0

内部クラスは、それを囲むクラスのthis参照をキャプチャします。内部クラスインスタンスの階層は、ツリー構造を形成します。これはJavaに固有のものです。

于 2011-10-24T17:41:03.000 に答える