2010-08-16 5 views
0

Les méthodes d'une variable membre ont-elles accès à d'autres variables membres privées dans la même classe? Je pense à une variable de membre foncteur.Confidentialité des variables membres dans les méthodes des autres variables membres

Un pointeur vers une variable membre privée peut-il être déréférencé et affecté à, en dehors de la classe? Qu'en est-il de la méthode d'une autre variable membre?

Peut-être quelque chose comme

class A 
{ 
someClass a,b; 

A(){a(&b);} 
} 

Répondre

1

Chaque fois que vous appelez la méthode d'une variable membre, sauf si son type est la classe en cours de définition, vous n'aurez pas accès aux variables de membre privées.

Si vous donnez accès (en quelque sorte) à un pointeur sur une variable membre, sans préciser que c'est "const", oui, il peut être déréférencé et assigné à. La même assertion est toujours vraie pour les méthodes des autres variables membres. APRES QUESTION A ETE EDITEE:
Dans votre exemple, vous appelez une méthode (via la variable membre "a"), en fournissant un pointeur vers la variable de membre privé "b". Vous accédez à ces deux variables membres privées dans A, ce qui est parfaitement correct C++.

1

Au moins si je comprends bien votre question, la réponse est non. Par exemple, codez comme ceci:

class outer { 
    class inner { 
     int x; 
    }; 

    void use_x() { inner::x = 0; } 
}; 

... ne compilera pas. Le fait que inner est imbriqué à l'intérieur de outer ne pas donner des fonctions membres de outer un accès spécial aux parties privées de inner.

Edit: post-édition, je ne vois rien d'inhabituel du tout - A() est (évidemment) un membre de class A qui comprend également des membres privés a et b. La définition de private est qu'il est accessible (c'est-à-dire que le nom est visible) pour coder dans la classe, mais pas pour coder en dehors de la classe. Puisque A() est à l'intérieur de la classe, a et b lui sont visibles.

+0

Ce n'est pas ce que je voulais dire, même si c'est un point intéressant. Voir ma modification. – user383352

Questions connexes