2010-10-11 14 views
5

Duplicar posibles:
Is this key-oriented access-protection pattern a known idiom?¿Hacer una clase de amigo solo tiene acceso especial a 1 función de otra clase?

tengo class A y class B. Quiero class A para acceder a una de las funciones privadas de class B; pero solo eso, no todo lo demás. ¿Es eso posible?

Una especie de ejemplo:

class A { 
    //stuff 
}; 

class B { 
    int r; // A cant use this 
    MagicFriendKeyword A void func(); // A can use this 
public: 
    ... 
}; 
+4

duplicados de [¿Es este patrón orientado a la clave de protección de acceso un lenguaje conocido?] (Http://stackoverflow.com/questions/3220009/is-this-key-oriented- access-protection-pattern-a-known-idiom). Esa pregunta brinda un ejemplo de cómo puedes lograr lo que estás pidiendo; en realidad [esta pregunta] (http://stackoverflow.com/questions/3217390/clean-c-granular-friend-equivalent-answer-attorney-client-idiom) podría ser un mejor duplicado. –

+0

También vea [esta pregunta] (http://stackoverflow.com/questions/3324898/can-we-increase-the-re-usability-of-this-key-oriented-access-protection-pattern), que busca generalízalo. Creo que terminamos con el nombre "idiomático de amigo pasivo". La idea es que solo ciertas clases pueden crear un tipo de "contraseña", y la función solo acepta ciertas claves de paso, otorgando acceso o "amistad". – GManNickG

+0

Hay más soluciones, y de acuerdo con el contexto, mejor que las mencionadas en las discusiones. En particular, factorizar 'func' como interfaz. No cierre preguntas abiertas, por favor, a menos que la discusión anterior similar sea tan abierta y completa. –

Respuesta

4

Si hay uno (o algunos) de los miembros funciones en la clase A, que desean utilizar funciones miembro privadas de clase de B, entonces se puede declarar aquellas uno/unos funciona como amigo. P.ej.

class B { 
    // ... 
    friend void A::mutateB(B *); 
    // ... 
}; 

Ver http://en.wikipedia.org/wiki/Friend_function

+0

Solo quiero que A pueda llamar a 1 función privada de B. – jmasterx

+0

Quiero que toda la clase A acceda a una función de la clase B, ya que cientos de funciones en A la usarán. – jmasterx

+5

Esto no es lo que se pide. Esto todavía le da a esa función acceso a _todos_ miembros de B. Quiere otorgar acceso a un solo miembro de B. – JoshD

Cuestiones relacionadas