2011-04-07 16 views
5

Al definir una clase como clase de amigo, ¿importa en qué sección de acceso se colocan las definiciones y, de ser así, eso cambia los miembros a los que tiene acceso el amigo?Definición de clase de amigo y secciones de descriptor de acceso

class aclass 
{ 
private: 
    // friend bclass; 

public: 
    // friend bclass; 

protected: 
    // friend bclass; 
}; 

class bclass 
{}; 

Respuesta

1

funciones amigas no se colocan dentro de los descriptores de acceso por convención, ya que, por definición, no son parte de la clase. Es posible hacer algo como esto:

class Elephants 
{ 
//friend void notAMemberFuncion(argument 123); 

public: 
// member functions; 

protected: 
// data members; 
}; 
+1

lea la pregunta, sin hablar de las funciones de amigo, sino de las clases de amigos. – Zamfir

2

Una vez que coloca la clase/función friend dentro de una clase determinada (AClass decir '') cualquier lugar. Tendrá acceso a todos los miembros definidos de la clase (independientemente de público/privado/protegido); por ejemplo:

class aClass 
{ 
public: int pub; void fun1() {} 
protected: int pro; void fun2() {} 
private: int pri; aClass(const aClass& o); 
    friend void outsider(); 
}; 

Friend function outsider() puede acceder a pub, pro, pri, fun1, fun2; pero no un constructor de copia de clase en este caso (si no está definido en ningún lugar).

1

La clase/función de amigo puede acceder a todos los miembros privados/protegidos/públicos de la clase, cuya sección de acceso a la clase/función de amigo se coloca no hace ninguna diferencia. Se sugiere poner clase/función de amigo en la sección pública, porque los amigos son parte de la interfaz de la clase.

3

especificadores de acceso no se aplican a un amigo función/Clase
Se puede declarar la amigo de función o de clases en cualquier especificador de acceso y la función/Clase todavía tendrá acceso a todas las variables miembro (Público, Protegido & Privado) de esa Clase.

Cuestiones relacionadas