OVH Cloud OVH Cloud

Supprimer "private"

54 réponses
Avatar
Fabien LE LEZ
Bonjour,

Soit une classe, avec un certain nombre de membres privés ou protégés,
dans un programme donné, terminé, qui fonctionne.

À cause d'un "friend" illégal[*], que gcc n'accepte pas, je souhaite
supprimer la ligne "friend XXX" et les "private:" et "protected:"[**].

Il me semble que cette modification ne changera pas le fonctionnement
du programme.

Quelqu'un pourrait-il confirmer ?

Merci d'avance.




[*] <http://www.comeaucomputing.com/techtalk/templates/#friendclassT>

[**] Oui, je sais, ce n'est pas forcément une idée géniale, mais comme
je ne compte pas pondre du code qui utilise directement ces classes,
je ne pense pas avoir besoin de la protection apportée par "private"
et "protected".

4 réponses

2 3 4 5 6
Avatar
Michel Michaud
Dans le message ,
Bertrand Lenoir-Welter writes:
Je crois que tu as raté une partie du problème: si j'ai 2
fonctions f(int) et f(double) dont l'une des deux est privée, et
que j'appelle f(1), qui appellera-t-il ?


Vous codez souvent deux fonctions de même label dont une est
privée et l'autre publique ? Même après le café ? Même avec du
sucre ?


Oui.

struct stream {
stream();
explicit stream(const string&);
// ...

private:
stream(const stream&); // not implemented
// ...
};


Je suppose qu'avec le niveau de cette discussion, il sera intéressant
de dire que l'on n'a pas affaire ici à deux fonctions du même nom...
car les constructeurs n'ont pas de nom selon la norme :-)

Ceci dit, on peut dire qu'ils ont le même « label » (?) si l'on définit
adéquatement ce mot...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Avatar
Michel Michaud
Dans le message ,
J'avais entendu dire qu'une version de Visual C++ utilisait, pour le
symbole décimale, le "locale" de Windows. Donc, sur un Windows
français, il fallait mettre des virgules à la place des points.


Pas dans les programmes ! (mais à l'exécution, on peut avoir à entrer
les données selon le locale, c'est normal non ?)

J'ai moi-même découvert VC++ il y a trois jours, donc je ne sais pas
si c'est vrai.


Ça veut dire quoi « découvert VC++ » ?


D'un autre côté, Excel a cette même idiosynchrasie.


Là on est en mode « utilisateur ne connaissant pas la programmation »
et la virgule est encore normale (en français).

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Gabriel Dos Reis
"Michel Michaud" writes:

| Dans le message ,
| > Bertrand Lenoir-Welter writes:
| >>> Je crois que tu as raté une partie du problème: si j'ai 2
| >>> fonctions f(int) et f(double) dont l'une des deux est privée, et
| >>> que j'appelle f(1), qui appellera-t-il ?
| >>
| >> Vous codez souvent deux fonctions de même label dont une est
| >> privée et l'autre publique ? Même après le café ? Même avec du
| >> sucre ?
| >
| > Oui.
| >
| > struct stream {
| > stream();
| > explicit stream(const string&);
| > // ...
| >
| > private:
| > stream(const stream&); // not implemented
| > // ...
| > };
|
| Je suppose qu'avec le niveau de cette discussion, il sera intéressant
| de dire que l'on n'a pas affaire ici à deux fonctions du même nom...
| car les constructeurs n'ont pas de nom selon la norme :-)

et tu sais aussi bien que moi que la norme est en contradiction
interne sur ce point -- les constructeurs ont bien un nom, c'est juste
qu'une partie de la norme ne le sait pas encore :-)

| Ceci dit, on peut dire qu'ils ont le même « label » (?) si l'on définit
| adéquatement ce mot...

Ah!

-- Gaby
Avatar
kanze
Michel Michaud wrote:
Dans le message ,
J'avais entendu dire qu'une version de Visual C++ utilisait,
pour le symbole décimale, le "locale" de Windows. Donc, sur
un Windows français, il fallait mettre des virgules à la
place des points.


Pas dans les programmes ! (mais à l'exécution, on peut avoir à
entrer les données selon le locale, c'est normal non ?)

J'ai moi-même découvert VC++ il y a trois jours, donc je ne
sais pas si c'est vrai.


Ça veut dire quoi « découvert VC++ » ?


Qu'il ne savait pas qu'il existait un compilateur avec ce nom
avant:-) ?

D'un autre côté, Excel a cette même idiosynchrasie.


Là on est en mode « utilisateur ne connaissant pas la
programmation » et la virgule est encore normale (en
français).


Ce n'est pas si simple, parce que c'est aussi un langage de
programmation. Excel a la particularité de ne pas réelement
distinguer entre les données entrées en interactives (qui
doivent respecter la localisation) et le programme.

Que se passe-t-il, par exemple, si j'écris un jeu de macros ou
de formes Excel que je distribue mondialement ?

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


2 3 4 5 6