Функції члена самого класу завжди мають доступ до private
членів, незалежно від того, чи визначена функція члена в класі або поза класом, і незалежно від того, чи є спеціальна функція члена, наприклад конструктор копіювання / переміщення.
Тому вони не friend
є класом, тому що це не має жодного сенсу. Вони вже є частиною класу. Проте вони мають доступ до всіх private
членів не тому, що вони є friend
, а тому, що вони є частиною класу.
Якби неможливо ініціалізувати членів у конструкторі (оскільки вони недоступні), то вся концепція доступності членів була б безглуздою. (Як би ви ініціалізували члена?)
Крім того, доступність - це жодним чином не питання об'єкта, на який має доступ учасник. Доступність - питання лише в тому, де в коді використовується назва (ім'я учасника). Якщо функція може отримати доступ до члена одного екземпляра класу, то вона також може отримати доступ до члена іншого екземпляра того ж класу.