1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que la liste des arguments diffère class Vecteur { protected: int m_x, m_y; public : Vecteur() {m_x = m_y = 0;} Vecteur(int x, int y) {m_x = x; m_y = y;} void Deplace(int x, int y); void Deplace(const Vecteur& v); }; int main() { Vecteur v1(3, 5), v2(6, 7); v1. Deplace(8, 9); v1. Deplace(v2); v1. Deplace(10);// Impossible return 0; } Vecteur::Deplace(int x, int y) { m_x += x; m_y += y; } Vecteur:: Deplace(const Vecteur& v) { m_x += v.m_x; m_y + = v.m_y; }
2 Surcharge dopérateurs Permet de redéfinir les opérateurs pour un objet quelconque Si est un opérateur binaire, n m peut sinterpréter comme n.operator (m) Ex : n + m sinterprète comme n.operator+( m ) Si est un opérateur unaire, n peut sinterpréter comme n.operator () Ex : n++ sinterprète comme n.operator++() Cas particulier : le compilateur génère un opérateur daffectation par défaut ; il est souvent nécessaire de le redéfinir La plupart des opérateurs peuvent être redéfinis pour nimporte quelle classe
3 Surcharge dopérateurs : exemple class Vecteur { public : protected: int m_x, m_y; public : Vecteur() {m_x = m_y = 0;} Vecteur(int x, int y) {m_x = x; m_y = y;} bool operator==(const Vecteur & v); Vecteur & operator=(const Vecteur & v); Vecteur & operator+(const Vecteur & v); friend std::ostream& operator<<(std::ostream& os, const Vecteur& v); }; vecteur.h int main() { Vecteur v1(3, 5), v2(6, 8), v3, v4; v3 = v1 + v2;// Opérateur = et opérateur + v4 = v3; // Opérateur = if (v3 == v4)// Opérateur = = std::cout << « Vecteurs identiques ; cest normal !\n "; std::cout << v4; ofstream f(« fichier.txt »); f << v4; f.close(); return 0; } main.cpp bool Vecteur ::operator==(const Vecteur & v) { return (m_x == v. m_x && m_y == v. m_y); } Vecteur & Vecteur ::operator=(const Vecteur & v) { m_x = v. m_x ; m_y = v. m_y ; return *this; // this contient ladresse de lobjet lui-même } Vecteur Vecteur ::operator+(const Vecteur & v) { Vecteur vv(m_x + z.m_x, m_y + z.m_y); return vv; } std::ostream& operator<< (std::ostream& os, Vecteur& v) { os << « Abscisse " << v.m_x << "\n"; os << « Ordonnée " << v.m_y << "\n"; return os; } vecteur.cpp
4 Surcharge dopérateurs +-*/%=! +=-=*=/=%=++-- <><=>===!=&&|| &|^<<>> []newdelete Opérateurs pouvant être redéfinis