Las funciones miembro de la clase en sí siempre tienen acceso a los private
miembros, sin importar si la función miembro se define dentro de la clase o fuera de clase y si se trata de una función miembro especial como un constructor de copia / movimiento.
Por lo tanto, no son friend
de la clase, porque eso no tiene ningún sentido. Ya son parte de la clase. Aún así, tienen acceso a todos los private
miembros, no porque sean friend
s, sino porque son parte de la clase.
Si no fuera posible inicializar miembros en un constructor (porque son inaccesibles), entonces todo el concepto de accesibilidad de miembros sería inútil. (¿Cómo inicializarías al miembro?)
Además, la accesibilidad no es de ninguna manera una cuestión del objeto en el que se accede a un miembro. La accesibilidad es solo una cuestión de en qué parte del código se usa un nombre (el nombre del miembro). Si una función puede acceder al miembro de una instancia de una clase, entonces también puede acceder al miembro de otra instancia de la misma clase.