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