嵌套类型名称
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 的结尾
备注
虽然一个枚举类型中定义在类声明中,撤消不为真;类类型不能定义在枚举声明中。