Déclarer des objets dans les attributs de la classe définissant l'objet déclaré

Résolu
cs_pachalcs Messages postés 5 Date d'inscription samedi 9 mai 2009 Statut Membre Dernière intervention 5 octobre 2011 - 12 août 2011 à 11:00
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 - 12 août 2011 à 11:33
Bonjour,

Je suis entrain de développer un générateur de traffic et je voulais savoir si l'on peut déclarer des objets (par exemple Packet) dans les attributs de la classe Packet pour pointer sur d'autre paquets.

Concrètement est ce qu'on peut faire cela dans les attributs:

class Packet
{
 
private:
    Packet *m_previousPacket; //  EST CE QUE C'EST POSSIBLE?
    Packet *m_followingPacket; // EST CE QUE C'EST POSSIBLE?
 
public:
 
    DropPacket(); // PAS IMPORTANT POUR LA QUESTION
    MarkedPacket(int VLAN); // PAS IMPORTANT POUR LA QUESTION
 
 
};


Merci d'avance

4 réponses

BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
12 août 2011 à 11:18
Oui, c'est possible.
Au vu de ton code, tu cherches à chainer des éléments. Plutôt que de ré-inventer la roue, je te proposais de voir si la classe vector de la STL pouvait correspondre à tes besoins...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
12 août 2011 à 11:33
Petite précision:
- std::array => Tableau à taille fixe.
- std::vector => Tableau à taille variable.
- std::list => Liste doublement chaînée.
- std::forward_list => Liste simplement chaînée.

En gros, ce que Buno te dit, c'est qu'il serait préférable pour toi de faire:
class Packet
{
public:
    DropPacket();
    MarkedPacket(int VLAN);
};

Puis:
std::list packets;
// ou
std::list packets;
// ou encore mieux
std::list packets; // En utilisant un boost::intrusive_pointer sur Packet.


Si tu n'as pas besoin de "retourner en arrière", alors un std::forward_list serait plus adapté qu'un std::list.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
12 août 2011 à 11:04
Bonjour,
Si tu veux faire une liste chainée, pourquoi ne pas te tourner vers les std::vector?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_pachalcs Messages postés 5 Date d'inscription samedi 9 mai 2009 Statut Membre Dernière intervention 5 octobre 2011
12 août 2011 à 11:11
Je n'ai pas compris ta question? En fait mon probleme c'est de savoir si je peux déclarer un objet Packet dans les attributs de la classe décrivant ce meme objet?
0