Локальные вложенные классы

Класс может быть вложен в блок функции (или метода какого-либо класса). Такие классы называются локальными вложенными классами. Перечислим особенности использования локальных вложенных классов:

  • вложенный класс всегда будет виден только внутри блока функции;
  • внутри локального вложенного класса есть доступ к локальным константам внутри функции (объявленным до класса), глобальным переменным, функциям, классам, перечислениям и т. д. К локальным переменным доступа нет;
  • все методы внутри локального вложенного класса должны быть встроенными;
  • локальные вложенные классы не могут содержать статических полей;
  • создать экземпляр локального вложенного класса можно только внутри функции после блока, описывающего этот класс.

Пример использования локального вложенного класса приведен в листинге 13.35.

Листинг 13.35. Локальные вложенные классы

#include <iostream>

int a = 30;
void print(int n) {
   std::cout << n << std::endl;
}
void func() {
   int z = 40;
   const int M = 50;
   class Point {          // Локальный вложенный класс
      int x_, y_;
   public:
      Point(int x, int y): x_(x), y_(y) { }
      int getX() { return x_; }
      int getY() { return y_; }
      void test() {
         print(a);    // Доступ к глобальной переменной и функции
         // print(z); // Доступа к локальной переменной нет
         print(M);    // Доступ к локальной константе
      }
      static int sum(int x, int y) { // Статический метод
         return x + y;
      }
   };

   Point obj(10, 20);
   std::cout << obj.getX() << std::endl; // 10
   std::cout << obj.getY() << std::endl; // 20
   obj.test();                           // 30
                                         // 50
   std::cout << z << std::endl;          // 40
   std::cout << Point::sum(10, 20);      // 30
}

int main() {
   func();
   return 0;
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов