| View previous topic :: View next topic |
| Author |
Message |
Jean-Marc Bourguet Guest
|
|
| Back to top |
|
 |
Aurélien REGAT-BARREL Guest
|
Posted: Thu Jun 10, 2004 2:16 pm Post subject: static prive Vs namespace prive |
|
|
Bonjour à tous,
l'énorme succès de ma question précédente m'amène à poser une question plus
coute :
que pensez-vous de l'utilisation d'un namespace privé dans le .cpp à la
place d'un membre statique privé dans le .h + .cpp.
Exemple simple : on veut compter le nombre de classes créées :
// --------- static privé ---------
// .h
class Compte
{
public:
Compte();
static int NombreDeClasses();
private:
static int s_NbClasses;
};
//.cpp
int Compte::s_NbClasses = 0;
int Compte::NombreDeClasses() { return s_NbClasses; }
Compte::Compte() { ++s_NbClasses; };
// --------- namespace privé ---------
// .h
class Compte
{
public:
Compte();
static int NombreDeClasses();
};
//.cpp
namespace
{
int NbClasses = 0;
}
int Compte::NombreDeClasses() { return ::NbClasses; }
Compte::Compte() { ++::NbClasses; };
Que préférez-vous ?
--
Aurélien REGAT-BARREL
|
|
| Back to top |
|
 |
Aurélien REGAT-BARREL Guest
|
Posted: Thu Jun 10, 2004 2:21 pm Post subject: Re: static prive Vs namespace prive |
|
|
| Quote: | Ne pas mettre dans un .h des choses qui peuvent ne pas y etre.
|
C'est aussi mon avis.
Cela me pousse à cette question provocatrice : quelle est l'utilité d'une
variable membre static ?
--
Aurélien REGAT-BARREL
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Thu Jun 10, 2004 3:26 pm Post subject: Re: static prive Vs namespace prive |
|
|
"Aurélien REGAT-BARREL" <nospam-aregatba (AT) yahoo (DOT) fr.invalid> writes:
| Quote: | Ne pas mettre dans un .h des choses qui peuvent ne pas y etre.
C'est aussi mon avis.
Cela me pousse à cette question provocatrice : quelle est l'utilité d'une
variable membre static ?
|
Une classe en C++ a plusieurs fonctionnalites:
- type
- espace de nommage
- protection d'acces
Les membres statiques permettent de profiter des deux derniers sans
prendre en compte le premier.
Comme le seul autre moyen d'avoir une certaine protection d'acces sont
les namespaces anonymes et declarations statiques de fichiers qui sont
limites a un fichier, si on veut de la protection d'acces le choix est
restreint.
Pour les membres statiques publics, le choix est simplement celui du
meilleur espace de nommage.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Aurélien REGAT-BARREL Guest
|
Posted: Thu Jun 10, 2004 4:03 pm Post subject: Re: static prive Vs namespace prive |
|
|
Est-ce que déclarer une classe dans un namespace privé te choque ou pas ?
// Data.h : interface d'accès aux données (lecture seule)
class Data
{
public:
int GetValue( int Index ) const;
protected:
std::vector<int> Values;
};
// PredefinedData.h : accès à des Data prédéfinies
namespace PredefinedData
{
Data GetPredefinedData( std::string DataName );
}
// PredefinedData.cpp
namespace // namespace privé
{
class DataFiller : public Data
{
public:
void AddValue( int V ) { this->Values.push_back( V ); }
};
}
namespace PredefinedData
{
Data GetPredefinedData( std::string DataName )
{
DataFiller data;
data.AddValue( 10 );
return data;
}
}
C'est ce que j'ai fait et je ne sais pas trop si c'est bien ou s'il y a
mieux.
Faudrait-il plutot créer la classe DataFiller dans ses propres fichiers (.h,
..cpp) et les mettres dans un répertoire private par exemple ?
Déclarer une classe dans un cpp me gêne un peu.
A+
--
Aurélien REGAT-BARREL
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
|
| Back to top |
|
 |
Aurélien REGAT-BARREL Guest
|
Posted: Fri Jun 11, 2004 8:13 am Post subject: Re: static prive Vs namespace prive |
|
|
"Jean-Marc Bourguet" <jm (AT) bourguet (DOT) org> a écrit dans le message de
news:pxbbrjr5rb9.fsf (AT) news (DOT) bourguet.org...
| Quote: | Ca ne me gene absolument pas.
|
Ok merci.
Je trouve ce procédé meilleur que de passer par friend.
A+
--
Aurélien REGAT-BARREL
|
|
| Back to top |
|
 |
|