Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

namespace contre classe avec membre statique

21 réponses
Avatar
Martinez Jerome
Bon voila, en lisant du code, je retrouve deux type d'ecriture, qui
reviennent au meme a l'utilisateur final :

namespace toto
{
int fonction();
}

ou
class toto
{
static int fonction();
};

Pour l'utilisateur, c'est pareil :
toto::fonction();

Quelle est la "meilleure" methode pour programmer? avantage de l'un ou
l'autre?

10 réponses

1 2 3
Avatar
Frédéri MIAILLE
"Martinez Jerome" a écrit dans
le message de news: bdhad6$
Bon voila, en lisant du code, je retrouve deux type d'ecriture, qui
reviennent au meme a l'utilisateur final :

namespace toto
{
int fonction();
}

ou
class toto
{
static int fonction();
};

Pour l'utilisateur, c'est pareil :
toto::fonction();

Quelle est la "meilleure" methode pour programmer? avantage de l'un ou
l'autre?

Je pencherai plutôt pour les namespaces qui ne conservent la validité des

éléments que dans le bloc ce qui peut, le cas échéant, constituer une
économie.

Maintenant, j'ai une question.
Le retour de fonction de type statique signifie quoi ? je n'arrive pas à
mettre la main sur un exemple.
Ca veut dire que cette valeur de retour doit être statique ? Je ne crois
pas. C'est la fonction qui est statique je crois bien.
Ou est l'utilité.
J'aimerai savoir...

--
Frédéri MIAILLE
fr.comp.lang.c
fr.comp.lang.c++
fr.comp.os.ms-windows.programmation
fr.comp.graphisme.programmation

Avatar
Christophe Lephay
"Frédéri MIAILLE" a écrit dans le message
de news:bdhe9k$bhd$
Le retour de fonction de type statique signifie quoi ? je n'arrive pas à
mettre la main sur un exemple.
Ca veut dire que cette valeur de retour doit être statique ? Je ne crois
pas. C'est la fonction qui est statique je crois bien.
Ou est l'utilité.
J'aimerai savoir...


Une fonction statique peut être appelée sans passer par un quelconque objet.
En fait, aux paramètres transmis à une fonction membre, s'ajoute une
paramètre supplémentaire (même si il n'apparait pas dans la signature
visible) : this. Une fonction membre statique ne contient pas de pointeur
this, ce qui explique aussi pourquoi elle ne peut pas non plus accéder aux
données membres de la classe, qui sont spécifiques à chaque instance. Du
coup, une fonction membre statique ne pourra accéder qu'aux données membres
statiques.

Pour schématiser, le static permet de dire au compilo de ne pas ajouter de
paramètre this...

Chris

Avatar
Frédéri MIAILLE
"Christophe Lephay" a écrit dans le message
de news: bdhfca$136$
"Frédéri MIAILLE" a écrit dans le
message

de news:bdhe9k$bhd$
Le retour de fonction de type statique signifie quoi ? je n'arrive pas à
mettre la main sur un exemple.
Ca veut dire que cette valeur de retour doit être statique ? Je ne crois
pas. C'est la fonction qui est statique je crois bien.
Ou est l'utilité.
J'aimerai savoir...


Une fonction statique peut être appelée sans passer par un quelconque
objet.

Donc on peut l'appeler de l'extérieur ?
Pour l'appeler, puis-je faire :
class toto
{
static int fonction();
};
fonction();

Il peut y avoir un conflit de nom avec une autre fonction non statique situé
à l'extérieur de la classe ?

En fait, aux paramètres transmis à une fonction membre, s'ajoute une
paramètre supplémentaire (même si il n'apparait pas dans la signature
visible) : this. Une fonction membre statique ne contient pas de pointeur
this, ce qui explique aussi pourquoi elle ne peut pas non plus accéder aux
données membres de la classe, qui sont spécifiques à chaque instance. Du
coup, une fonction membre statique ne pourra accéder qu'aux données
membres

statiques.
Et du coup ça sert à quoi une fonction membre statique ?

Et les membres statiques alors, on peut les modifier sans avoir déclaré
d'instance de la classe ?
Avec par exemple un truc dans le genre :
MaClasse::StaticMember=true;
Et tous les objets de cette classe MaClasse auraient cette donnée membre à
true dès leur instanciation ?

Autre question (c'est la série)
Si ma classe à une donnée membre statique, si je change cette donnée membre,
il se passe quoi ? toutes les instances de cette classe ont la donnée membre
statique qui change en conséquence ?

Merci en tout cas.
--
Frédéri MIAILLE
fr.comp.lang.c
fr.comp.lang.c++
fr.comp.os.ms-windows.programmation
fr.comp.graphisme.programmation


Avatar
Arnaud Meurgues
Martinez Jerome wrote:

namespace toto { int fonction(); }
class toto { static int fonction(); };

Pour l'utilisateur, c'est pareil :
toto::fonction();


Pas tout à fait. Une classe est un espace de nom fermé (on ne peut rien
y rajouter en dehors du fichier où elle est définie), alors qu'un
namespace est un espace ouvert (on peut rajouter des symbols dans un
namespace dans n'importe quelle unité de compilation).

Arnaud

Avatar
Martinez Jerome
Arnaud Meurgues wrote:

Pas tout à fait. Une classe est un espace de nom fermé (on ne peut rien
y rajouter en dehors du fichier où elle est définie), alors qu'un
namespace est un espace ouvert (on peut rajouter des symbols dans un
namespace dans n'importe quelle unité de compilation).


Quelle est la difference pour l'utilisateur?

Avatar
Martinez Jerome
Frédéri MIAILLE wrote:


Donc on peut l'appeler de l'extérieur ?
Pour l'appeler, puis-je faire :
class toto
{
static int fonction();
};
fonction();

Il peut y avoir un conflit de nom avec une autre fonction non statique situé
à l'extérieur de la classe ?



Je ne suis pas : on l'appelle avec toto::fonction();
Vu ta signature, tu dois connaitre le C++, donc je comprend pas que tu
poses cette question sur les membres statiques d'une classe.

Avatar
Arnaud Meurgues
Martinez Jerome wrote:

Pas tout à fait. Une classe est un espace de nom fermé (on ne peut
rien y rajouter en dehors du fichier où elle est définie), alors qu'un
namespace est un espace ouvert (on peut rajouter des symbols dans un
namespace dans n'importe quelle unité de compilation).


Quelle est la difference pour l'utilisateur?


Si toto est une classe ne contenant pas titi, il sait que
toto::titi();
ne sera jamais valide.

Si toto est un namespace, il se peut qu'un jour
toto::titi();
devienne valide.

C'est une différence minime, mais c'est une différence.

Vu autrement, s'il l'estime utile, un utilisateur peut rajouter (parce
que c'est un regroupement logique) tite dans le namespace toto. Il ne le
pourra pas dans la classe toto (à moins d'avoir les sources).

Arnaud


Avatar
Michel Michaud
Dans news:bdhad6$, Martinez
Bon voila, en lisant du code, je retrouve deux type d'ecriture, qui
reviennent au meme a l'utilisateur final :

namespace toto
{
int fonction();
}

ou
class toto
{
static int fonction();
};

Pour l'utilisateur, c'est pareil :
toto::fonction();

Quelle est la "meilleure" methode pour programmer? avantage de l'un
ou l'autre?


Il me semble que personne n'a mentionné qu'une fonction statique
d'une classe aura la possibilité d'accéder aux données privées
d'un objet de la classe (reçu en paramètre ou déclaré autrement,
car il n'y a pas de this évidemment). Ça explique parfois le
choix obligatoire d'une fonction statique au lieu de celle d'un
namespace.

En plus, il faut bien ajouter que créer une autre portée avec un
namespace quand on a déjà une classe sur le même « sujet » est
souvent une nuisance. Par exemple, si j'ai une classe Date et
que je veux une fonction Date Aujourdhui(), ça pourrait paraître
plus logique de faire tout simplement une fonction membre statique.

À l'opposé, un avantage du namespace est qu'on peut faire un
using pour éviter de préfixer tous les emplois...

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

on a déjà une classe

Avatar
Frédéri MIAILLE
Je ne suis pas : on l'appelle avec toto::fonction();
Vu ta signature, tu dois connaitre le C++, donc je comprend pas que tu
poses cette question sur les membres statiques d'une classe.
Mmm ma question était mal posée, désolé. Je me suis emmêlé les pinceaux.

class MaClasse
{
bool StaticMember;
};
MaClasse::StaticMember=true;
Est-ce possible ?


--
Frédéri MIAILLE
fr.comp.lang.c
fr.comp.lang.c++
fr.comp.os.ms-windows.programmation
fr.comp.graphisme.programmation

Avatar
Martinez Jerome
Frédéri MIAILLE wrote:
Je ne suis pas : on l'appelle avec toto::fonction();
Vu ta signature, tu dois connaitre le C++, donc je comprend pas que tu
poses cette question sur les membres statiques d'une classe.


Mmm ma question était mal posée, désolé. Je me suis emmêlé les pinceaux.
class MaClasse
{
bool StaticMember;
};
MaClasse::StaticMember=true;
Est-ce possible ?



Non.
Mais a mon souvenir (je n'ai pas de compilo au taf),

class MaClasse
{
_static_ bool StaticMember;
};
MaClasse::StaticMember=true;

Marche
Ben oui, faut bien le declarer statique le bool!


1 2 3