Názvy vnořený typ
Microsoft C++ podporuje prohlášení vnořené typy – pojmenované i anonymní.Anonymní struktur a třídy jsou s konkrétní příponou Microsoft C++.Anonymní odbory 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
Výše uvedený název první třída odkazuje na vnější třídy; druhá se týká vnitřní třídy.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 třídy názvy identifikátorů šablony mohou být použity, volitelné šablony klíčovým slovem, jako v
MyClass<int>::Inner
Outer<int>::template Inner<int>
V některých situacích programování nemá smysl definovat typy vnořených.Tyto typy jsou viditelné pouze funkce členů typu třídy, ve kterém jsou definovány.Jejich lze rovněž zviditelnit sestavením typu kvalifikovaný název pomocí operátoru rozsah rozlišení (:).
[!POZNÁMKA]
Jedna hierarchie běžně používané třídy, která využívá vnořené typy je iostream.V záhlaví souborech definice třídy iostream ios zahrnuje řadu Výčtové typy, které jsou zabalené pouze pro knihovny 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()
{
}
Název definice vnořené třídy přístup, použijte operátor oboru rozlišení (:) k vytvoření třídy úplný název.Použití tohoto operátoru je znázorněno inicializací z statické členy v předchozím příkladu.Použijte vnořené třídy v aplikaci, jako například použijte kód:
WinSystem::Window Desktop;
WinSystem::Window AppWindow;
cout << "Number of active windows: " << Desktop.Count() << "\n";
Vnořené anonymní 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řídy musí být agregační žádné funkce členů a žádné statické členy.
END Microsoft konkrétní
[!POZNÁMKA]
Přestože uvnitř deklarace třídy mohou být definovány Výčtový typ, naopak není pravda; nelze definovat typy tříd uvnitř deklarace výčtu.