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

Messages postés
5
Date d'inscription
samedi 9 mai 2009
Statut
Membre
Dernière intervention
5 octobre 2011
- - Dernière réponse : cptpingu
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
- 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
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
14685
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 décembre 2019
90
3
Merci
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...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BunoCS
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
14685
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 décembre 2019
90
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
5
Date d'inscription
samedi 9 mai 2009
Statut
Membre
Dernière intervention
5 octobre 2011
0
Merci
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?
Commenter la réponse de cs_pachalcs