巢狀型別名稱
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
備註
第一個類別名稱上方指的是外部的類別。 第二個是指到內部類別。 這些名稱可能會使用進一步巢狀。 因此,
Outer::Inner
::Outer::Inner
::Outer::Inner::Inner2
是有效的類別名稱。 類別名稱的位置範本識別項可能用到,以選擇性的範本關鍵字如
MyClass<int>::Inner
Outer<int>::template Inner<int>
在某些程式的情況下,很合理,定義巢狀型別。 這些型別是只以所定義的類別型別的成員函式的 [看得見的。 它們也可以設定為可見蓄意設計以限定型別名稱,使用範圍解析運算子 (:)。
注意事項 |
---|
一個常用的類別階層,採用巢狀型別是 iostream。在 iostream 標頭檔,而類別的定義 io 含有一系列的列舉型別,封裝只能與 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 特定
注意事項 |
---|
雖然類別宣告中,可定義列舉型別,但反過來說則不會,則為 true。 類別型別無法定義列舉型別宣告。 |