Имена вложенных типов
Microsoft C++ поддерживает объявление вложенных типов - и неименованные и анонимная.Анонимные структуры и классы расширения Майкрософт, определенное в 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()
{
}
Анонимный класс должен быть агрегатом, который не содержит функции-члены и статические элементы.
ЭЛЕМЕНТ, относящийся Майкрософт
![]() |
---|
Хотя перечислимый тип можно указать внутри объявления класса, reverse не имеет значение true; типы классов не может быть определен внутри объявления перечисления. |