Sdílet prostřednictvím


Vnořené typy názvů

Jazyk C++ společnosti Microsoft podporuje deklaraci vnořených typů, pojmenovaných i anonymních. Anonymní struktury a třídy jsou specifickým rozšířením jazyka C++ společnosti Microsoft. Anonymní sjednocení jsou standardní.

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

Poznámky

První výše uvedený název třídy odkazuje na vnější třídu, druhý odkazuje na vnitřní třídu. Tyto názvy lze dále vnořit.Tedy,

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

jsou všechny platné názvy tříd. Namísto názvů tříd lze použít identifikátory šablony s volitelným klíčovým slovem template, jako v

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

V některých situacích programování je vhodné definovat vnořené typy.Tyto typy jsou viditelné pouze pro členské funkce typu třídy, ve které jsou definovány.Lze je také zviditelnit pomocí kvalifikovaného názvu typu používajícího operátor rozlišení rozsahu (::).

[!POZNÁMKA]

Jedna běžně používaná hierarchie tříd, která používá vnořené typy, je třída iostream.V hlavičkových souborech třídy iostream, zahrnuje definice třídy ios řadu výčtových typů, které jsou dodány pouze pro použití s knihovnou iostream.

Příklad

Následující příklad definuje vnořené třídy:

// 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()
{
}

Chcete-li přistupovat k názvu definovaném ve vnořené třídě, použijte k vytvoření úplného názvu třídy operátor rozlišení rozsahu (::).Použití tohoto operátoru je uvedeno v inicializaci statických členů v předchozím příkladu.Chcete-li v programu používat vnořené třídy, použijte kód jako například:

WinSystem::Window Desktop;
WinSystem::Window AppWindow;

cout << "Number of active windows: " << Desktop.Count() << "\n";

Anonymní vnořené třídy nebo struktury lze definovat jako:

// nested_type_names2.cpp
class Ledger
{
   class
   {
   public:
      double PayableAmt;
      unsigned PayableDays;
   } Payables;

   class
   {
   public:
      double RecvableAmt;
      unsigned RecvableDays;
   } Receivables;
};

int main()
{
}

Anonymní třída musí být agregovaná a nesmí mít žádné členské funkce a žádné statické členy.

Specifické pro produkty společnosti Microsoft - konec

[!POZNÁMKA]

Přestože výčtový typ lze definovat uvnitř deklarace třídy, opak není pravdou. Typy třídy nelze definovat v deklaracích výčtů.

Viz také

Referenční dokumentace

Specifikátory typu jazyka C++