共用方式為


巢狀型別名稱

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。 類別型別無法定義列舉型別宣告。

請參閱

參考

C + + 型別規範中