OVH Cloud OVH Cloud

declaration de typedef dans un classe

4 réponses
Avatar
J-C.gibier
Bonjour
J'ai besoin de créér une classe abstraite contenant dont divers éléments
hériteront.
Et parmi ces éléments je veux définir un élément "liste d'éléments" je tente
donc le coup en écrivant :

<code>
typedef std::map<AnsiString, ElementDocument, std::less<AnsiString> >
LISTEELEMENTDOCUMENT;

class ElementDocument
{
private:
/* ...*/
protected:

/* ...*/
public:
/* ...*/
}
</code>

Mais le compilateur ne veux pas me faire un typedef sur une type de base non
défini (logique).
J'ai donc essayé comme ceci :

<code>
class ElementDocument
{
private:
/* ...*/
protected:
typedef std::map<AnsiString, ElementDocument, std::less<AnsiString> >
LISTEELEMENTDOCUMENT;
/* ...*/

public:
/* ...*/
}
</code>

Et là le compilateur accepte.
Seulement je voudrais être sûr que ce type d'implémentation ne me réserve
pas de surprise.
Et surtout je voudrais savoir si ce type de structuration de classe est bien
orthodoxe, je sais qu'une structure peut définir une référence pointeur sur
elle même donc je suppose qu'il en va de même pour un classe.

4 réponses

Avatar
kanze
"J-C.gibier" wrote in message
news:<409a65a0$0$415$...

J'ai besoin de créér une classe abstraite contenant dont divers
éléments hériteront. Et parmi ces éléments je veux définir un élément
"liste d'éléments" je tente donc le coup en écrivant :

<code>
typedef std::map<AnsiString, ElementDocument, std::less<AnsiString> >
LISTEELEMENTDOCUMENT;

class ElementDocument
{
private:
/* ...*/
protected:

/* ...*/
public:
/* ...*/
}
</code>

Mais le compilateur ne veux pas me faire un typedef sur une type de
base non défini (logique). J'ai donc essayé comme ceci :

<code>
class ElementDocument
{
private:
/* ...*/
protected:
typedef std::map<AnsiString, ElementDocument, std::less<AnsiString> >
LISTEELEMENTDOCUMENT;
/* ...*/

public:
/* ...*/
}
</code>

Et là le compilateur accepte.
Seulement je voudrais être sûr que ce type d'implémentation ne me réserve
pas de surprise.


Quel genre de surprises ? C'est quand même une construction assez
courante. Ce n'est pas particulièrement rare d'utilise une fonction
statique membre pour obtenir des instances d'un objet, en fonction d'une
clé. Et dans ce cas-ci, on aurait prèsque toujours un typedef soit dans
la classe, soit dans la fonction même.

Et surtout je voudrais savoir si ce type de structuration de classe
est bien orthodoxe, je sais qu'une structure peut définir une
référence pointeur sur elle même donc je suppose qu'il en va de même
pour un classe.


C'est tout ce qu'il y a de plus orthodoxe.

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

Avatar
adebaene
"J-C.gibier" wrote in message news:<409a65a0$0$415$...

Et surtout je voudrais savoir si ce type de structuration de classe est bien
orthodoxe, je sais qu'une structure peut définir une référence pointeur sur
elle même donc je suppose qu'il en va de même pour un classe.


En C++, une structure et une classe c'est exactement la même chose,
sauf que la visibilité par défaut est "public" pour une struct et
"private" pour une class.

Arnaud

Avatar
Fabien LE LEZ
On 7 May 2004 04:13:54 -0700, (Arnaud
Debaene) wrote:

En C++, une structure et une classe c'est exactement la même chose,
sauf que la visibilité par défaut est "public" pour une struct et
"private" pour une class.


<Mode pinailleur>
Il me semble qu'en C++, la notion de structure n'existe pas. Il n'y a
que des classes, qu'on peut déclarer par deux mots-clefs :
- class -> indique que l'héritage et les membres sont privés par
défaut
- struct -> indique que l'héritage et les membres sont publics
par défaut
</Mode>

--
;-)
FLL, Epagneul Breton

Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On 7 May 2004 04:13:54 -0700, (Arnaud
| Debaene) wrote:
|
| >En C++, une structure et une classe c'est exactement la même chose,
| >sauf que la visibilité par défaut est "public" pour une struct et
| >"private" pour une class.
|
| <Mode pinailleur>
| Il me semble qu'en C++, la notion de structure n'existe pas.

Si, si, la norme définit formellement la notion de structure --
dont l'intérêt me semble un peu limité, mais elle existe.

-- Gaby