Вопрос:

Вы реализуете на C++ класс Logger, содержащий приватные данные, такие как путь к файлу и уровень логирования. Для записи сообщений в файл вы используете внешнюю функцию logToFile(), которой необходимо предоставить доступ к этим закрытым данным, не нарушая принципов инкапсуляции. Укажите механизм языка С++, который позволяет предоставить внешней функции доступ к приватным членам класса без нарушения безопасности и инкапсуляции. Тип ответа: Одиночный выбор • с выбором одного правильного ответа из нескольких предложенных вариантов

Ответ:

Решение:

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

Рассмотрим предложенные варианты:

  • Сделать все поля публичными — это нарушает инкапсуляцию, так как все данные становятся доступны любому коду.
  • Передавать указатели на приватные поля — это возможно, но объявление дружественной функции является более прямым и элегантным решением для предоставления доступа именно внешней функции.
  • Объявить logToFile() дружественной функцией — это правильный механизм в C++, который позволяет предоставить доступ к приватным членам без нарушения принципов инкапсуляции.
  • Использовать статическую переменную внутри класса — статические переменные не решают проблему доступа к приватным членам экземпляра класса для внешней функции.

Ответ: Объявить logToFile() дружественной функцией

Подать жалобу Правообладателю