嵌套类型名称

Microsoft C++ 支持嵌套类型的声明 —命名和匿名。 匿名结构和类是特定于 Microsoft 的扩展到 C++。 匿名联合是标准的。

[::] class-name :: class-name
[::] template-id :: class-name
[::] class-name :: template-id
[::] template-id :: template template-id
:: template template-id :: template template-id

备注

上面的第一个类名称引用外部类;第二个引用内部类。 这些名称可以进一步嵌套。 因此,

Outer::Inner
::Outer::Inner
::Outer::Inner::Inner2

是所有类的有效名称。 在类名位置,模板标识符可能使用,使用选项模板,作为关键字

MyClass<int>::Inner
Outer<int>::template Inner<int>

在某些编程的情况下,很有意义定义嵌套类型。 这些类型只看到该类的功能输入其定义的成员。 也可以通过构造一个限定类型也变得可见名称使用范围解析运算符 (::)。

备注

使用嵌套类型的一个常用的类层次结构是 iostream。在 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 的结尾

备注

虽然一个枚举类型中定义在类声明中,撤消不为真;类类型不能定义在枚举声明中。

请参见

参考

C++类型说明符