Quelle est la syntaxe pour déclarer une fonction de membre statique en tant que existe une autre façon de plier tout dans une seule ligne? p> ami code> de la classe dans laquelle il réside.
Réponse h2> < p> S'il vous plaît ne pas savoir que cela découle de mon manque de connaissances sur les fonctions de membre statique C ++. La réponse est qu'ils n'ont pas besoin d'être
3 Réponses :
La fonction membre de la classe ne peut pas être un ami de sa propre classe - c'est déjà le membre de la classe et peut accéder à ses privés. Qu'est-ce que "le point dans l'amitié d'amitié? Ce n'est pas Facebook ... P>
Une fonction de membre statique a accès au Protégé
/
Parties d'une classe par défaut, pas besoin de le faire un
ami code>.
Juste pour signaler: la fonction étant statique est tout à fait sans importance. Toute fonction de membre de la classe B> peut accéder aux pièces privées / protégées de la classe.
@LittLeadv: C'est assez évident, le malentendu de l'OP semblait être exactement cela, que les fonctions de membre statique ne soient pas traitées différemment de la fonction de membre normale W.R.T. vérification d'accès.
Pas la réponse que je cherchais. Jmucchiello montre un exemple avec un pointeur, votre réponse est par référence.
@unixman: Euh ... cela n'a pas d'importance, le concept est toujours le même. Membre de la classe statique -> a accès à un contenu protégé / privé.
En fait, pas besoin d'utiliser un ami s'il est statique est plus précis. Une fonction de membre statique a accès aux internes de la classe, comme une fonction de membre normale. La seule différence est qu'il n'a pas de ce pointeur.
void MyClass::Callback(void* thisptr) { MyClass* p = static_cast<MyClass*>(thisptr); p->public_func(); // legal p->private_func(); // legal p->private_int_var = 0; // legal }
J'utilisais reterpret_cast
Il n'y a rien de mal avec Reterpret_cast ici. La coulée de Void *, static_cast et Reterpret_cast doivent produire un code identique basé sur les implémentations de la plupart des implémentations C ++.
Pas besoin d'utiliser static si c'est un ami.
@Avd alors il ne peut pas être appelé par C. C'est la raison pour laquelle il est statique en premier lieu.
@ UNIXMAX83: On ne peut pas appeler de toute façon par C car il doit également être déclaré externe "C". Bien que la plupart des compilateurs permettent d'appeler une fonction sans cela de C et cela fonctionne même, il n'est pas portable et qu'il existe un système qui dispose de différentes conventions d'appel pour les fonctions C et C ++.