//--------------------------------------------------------------- // MODULE: main.cpp // // COMMENTAIRES: // programme de test divise en deux parties: // // la premiere partie compilable comme suit: // // g++ -Wall -DCLISTE -o Tliste main.cpp // // permet de tester les composantes de la liste // // la seconde partie compilable comme suit: // // g++ -Wall -DCHERITE -o Therite personne.cpp etudiant.cpp professeur.cpp cours.cpp main.cpp // // permet de tester application de la liste a l'exercice d'heritage simple // // // AUTEURS: Philippe Langlais & Mohamed Lokbani // //----------------------------------------------------------------- #include #include #include "liste.h" #ifdef CLISTE int main(void) { List x,w; x.insert_head(4.4); x.insert_head(3.3); x.insert_head(2.2); x.insert_head(1.1); List y(x); // constructeur de recopie (car creation) List z=x; // constructeur de recopie (car creation) w=x; // operateur d'affectation cout<< "List(x) = "<< x << endl; // pourquoi utiliser removeAll alors qu'on peut faire plus complique ? while(!x.isEmpty()){ cout<< "Removal of " << *(x.Head())<< " in list x" << endl; x.remove_head(); } cout<< "List(x) = "<< x << endl; // note bien que les elts de x n'exitent plus, ceux des listes obtenues par recopie // exitent encore (voir le code de l'operateur de recopie) .. mais voir plus bas... // pour un cas pathologique... cout<< "List(y) ="<< y << endl; cout<< "List(z) ="<< z << endl; cout<< "List(w) ="<< w << endl; // illustration de tail cout << "le cas de tail\n"; List v; v=y.tail(); cout<< "List(v) (tail of y) = "<< v << endl; cout<< "List(y) = "<< y << endl; // notre patron de classe peut aussi bien gerer des listes d'entiers List i; i.insert_head(3); i.insert_head(2); i.insert_head(1); cout<< "List(i) = " << i << endl; // ou encore des listes de string List ph; ph.insert_end("C++"); ph.insert_end("quel"); ph.insert_end("beau"); ph.insert_end("langage"); cout << "List(ph) = " << ph << endl; ph.remove("beau"); cout << "List(ph) = " << ph << endl; ph.insert_head("Assurement"); ph.insert_end("complique"); cout << "List(ph) = " << ph << endl; // et si on testait la supression cout << "Search(C++,ph) = " << ph.search("C++") << endl; cout << "Search(belle,ph) = " << ph.search("belle") << endl; ph.remove_head(); ph.remove_end(); cout << "List(ph) = " << ph << endl; ph.remove_head(); ph.remove_end(); cout << "List(ph) = " << ph << endl; ph.remove("quel"); cout << "List(ph) = " << ph << endl; cout << "Search(tout,ph) = " << ph.search("tout") << endl; cout << "Search(belle,ph) = " << ph.search("belle") << endl; // et qu'advient-il si j'ai une liste de char * ?? List liste; liste.insert_head("voulu !"); liste.insert_head("comme"); liste.insert_head("toujours"); liste.insert_head("pas"); liste.insert_head("fonctionne"); liste.insert_head("ne"); liste.insert_head("tout"); cout << "liste[0]=" << liste[0] << endl; cout << "liste[1]=" << liste[1] << endl; liste[2] = "marche"; // un peu dangereux non ? cout << "List(liste) = " << liste << endl; List copie = liste; cout << "List(copie) = " << copie << endl; liste.removeAll(); cout << "List(liste) = " << liste << endl; cout << "List(copie) = " << copie << endl; return 0; } #endif // CLISTE #ifdef CHERITE #include "cours.h" #include "professeur.h" #include "personne.h" #include "etudiant.h" int main() { List lst_etud; Etudiant *etud; List lst_prof; Professeur *prof; List lst_cours; Cours *cours1, *cours2; cours1 = new Cours("IFT1166"); cours2 = new Cours("IFT1063"); etud = new Etudiant("Marc","LeCiel",98760); lst_etud.insert_head(*etud); (*cours1).addEtudiant(*etud); (*cours2).addEtudiant(*etud); delete etud; etud = new Etudiant("JIM","MIKE",1500); lst_etud.insert_head(*etud); (*cours2).addEtudiant(*etud); delete etud; etud = new Etudiant("mark","Jimy",2000); lst_etud.insert_head(*etud); (*cours1).addEtudiant(*etud); delete etud; prof = new Professeur("Mohamed","Lokbani",290); lst_prof.insert_head(*prof); (*cours1).addProfesseur(*prof); delete prof; prof = new Professeur("Bernard","Gendron",15); lst_prof.insert_head(*prof); (*cours2).addProfesseur(*prof); delete prof; prof = new Professeur("Jean-Yves","Potvin",120); lst_prof.insert_head(*prof); (*cours2).addProfesseur(*prof); delete prof; lst_cours.insert_head(*cours1); lst_cours.insert_head(*cours2); delete cours1; delete cours2; etud = new Etudiant("mark","Jimy",2000); cout << lst_etud.search(*etud) << endl; delete etud; prof = new Professeur("Jean-Yves","Potvin",120); cout << lst_prof.search(*prof) << endl; delete prof; cours2 = new Cours("IFT1063"); cout << lst_cours.search(*cours2) << endl; delete cours2; cours2 = new Cours("IFT1969"); cout << lst_cours.search(*cours2) << endl; delete cours2; cout<< lst_cours << endl; return 0; } #endif // CHERITE