Rendre une fonction dépendante d'une variable en c++
Ferméwella_salwa Messages postés 33 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 11 décembre 2024 - 1 nov. 2022 à 09:32
- Rendre une fonction dépendante d'une variable en c++
- Fonction si et - Guide
- Liste déroulante dépendante excel - Guide
- Comment rendre un fichier moins lourd - Guide
- Fonction moyenne excel - Guide
2 réponses
Modifié le 31 oct. 2022 à 14:22
Salut wella_salwa,
Ce que tu postes n'est pas un algorithme, c'est un extrait de code source en C++.
Il s'agit de l'implémentation de la méthode WindowIncrease() de la classe ConsumerPcon et il semblerait que "ton" code vienne de ce fichier ndn-consumer-pcon.cpp pour une classe décrite dans cet entête ndn-consumer-pcon.hpp :
https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.cpp#L110
https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.hpp#L39
Sais-tu ce qu'est le polymorphisme en C++ ?
oui je sais , je suis entrain de simuler une topologie sur NS-3
je n'ai pas une idée sur le " polymorphisme "
Modifié le 31 oct. 2022 à 15:51
Donc, l'implémentation de la méthode WindowIncrease() de la classe ConsumerPcon est dans ce fichier ndn-consumer-pcon.cpp pour une classe décrite dans cet entête ndn-consumer-pcon.hpp :
https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.cpp#L110
https://github.com/6th-ndn-hackathon/congestion-control/blob/master/apps/ndn-consumer-pcon.hpp#L39
Cette implémentation ne permet pas le passage de paramètres.
Comme le C++ supporte le polymorphisme, tu peux insérer dans la description de la classe ConsumerPcon de l'entête ndn-consumer-pcon.hpp une nouvelle méthode void WindowIncrease(int i); (en supposant que que i soit un int)
class ConsumerPCON : public ConsumerWindow { public: static TypeId GetTypeId(); /** * \brief Default constructor */ ConsumerPCON() : CC_ALGORITHM {boost::to_upper_copy(getEnvVar("SCEN_NAME"))} { assert(!CC_ALGORITHM.empty()); std::cout << "Started Consumer PCON, Algorithm: " << CC_ALGORITHM << "\n"; ConsumerWindow(); } // From App virtual void OnData(shared_ptr<const Data> contentObject) override; virtual void OnTimeout(uint32_t sequenceNumber) override; // virtual void // WillSendOutInterest(uint32_t sequenceNumber); private: void windowDecrease(); void windowIncrease(); void windowIncrease(int i); void cubicIncrease(); (...)
et écrire dans ndn-consumer-pcon.cpp l'implémentation de cette méthode avec cette nouvelle signature, sans toucher à la précédente (crée une nouvelle "fonction" portant le même nom, mais supportant le passage de ce paramètre) :
void ConsumerPCON::windowIncrease() { if (CC_ALGORITHM == "AIMD") { if (m_window < m_sstresh) { m_window = m_window + 1.0; } else { m_window += (1.0 / m_window); } } else if (CC_ALGORITHM == "CUBIC") { cubicIncrease(); } else if (CC_ALGORITHM == "BIC") { bicIncrease(); } else { assert((false) && "Wrong CC Algorithm!"); } } void ConsumerPCON::windowIncrease(int i) { // TODO: écrire la version modifiée de cette méthode devant s'exécuter // lorsqu'ellest appelée avec un int passé en paramètre }
Lorsque cette méthode WindowIncrease() sera appelée sans paramètres par le code existant, c'est le code d'origine qui s'exécutera.
Lorsque cette méthode WindowIncrease() sera appelée avec un int passé en paramètre, c'est le code de ta nouvelle méthode qui sera exécuté.
31 oct. 2022 à 17:35
Sans toucher au code existant, tu peux aussi faire une classe héritant de ConsumerPCON, qui comprenne cette méthode additionnelle.
1 nov. 2022 à 09:32
Merci infinement ...