2070 / C++ / Класи / Клас в класі

 

Внутрішній клас використовується для потреб зовнішнього (всеохоплюючого),
і може знаходитися в будь-якій секції public, private, protected

  • Якщо у вас є два класи з однаковим ім'ям, і один з них треба приховати
  • Внутрішній клас не має доступу до полів зовнішнього класу

class Book {
  public:
    void GetDates() {
      for (int i = 0; i < 3; i++)
      {
        cout << "Book" << i << ": " << mas[i].GetDate() << endl;
      }
    }
  private:
  // приватний клас - тільки для зовнішнього класу
    class Date {
      public:
        Date(int d, int m, int y) {
          this->d = d;
          this->m = m;
          this->y = y;
        }

        string GetDate() {
          return to_string(d) + "." + to_string(m) + "." + to_string(y);
        }

      private:
        int y;
        int m;
        int d;
      };

      Date mas[3]{
        Date(1, 1, 2020),
        Date(1, 1, 2021),
        Date(1, 1, 2022)
    };
};

int main()
{
  Book b1;
  b1.GetDates();
  system("pause");
  return 0;
}

Book0: 1.1.2020
Book1: 1.1.2021
Book2: 1.1.2022

Якщо внутрішній клас перенести в public, то ми б могли мати доступ до нього
Book::Date d1(1, 2, 2075);
cout << d1.GetDate();

1.2.2075