Structures de données et algorithmes – TP2 Maria-Iuliana Dascalu mariaiuliana.dascalu@gmail.com
Objectifs pour aujourd’hui Transition de C (TP1) à C++ (TP2) Struct vs. classes en C++ Templates
Exercice 1 Implémentez une fonction pour trier un tableau de 5 éléments de type double. Utilisez un mécanisme d'échange, qui doit être mis en œuvre dans une autre fonction. (Tip: Passage par valeur/passage par référence)
Exercice 2 Ajoutez à classe complex de nouvelles méthodes pour l'ajout, la division et la multiplication de nombres complexes.
#include <iostream> class complex { public: complex();// constructor without params complex(double param_re, double param_im){//constructor // use to initialize the members of the class with values and to allocates memory for some members this->re=param_re;//re=param_re; this->im=param_im;//im=param_im; } double getRe(){//method: getter return re; double getIm(){//method return im; complex complex_conjugate() {//method complex conjugate(re,-im);//object of type complex return conjugate; private: double re; double im; }; int main(){ complex number(2,3);// number is an object and complex is a class cout<<"The complex number is: "<<number.getRe()<<"+"<<number.getIm()<<"i"<<"\n";//number.getRe() is a method call complex conj=number.complex_conjugate(); cout<<"The conjugate number is: "<<conj.getRe()<<conj.getIm()<<"i"<<"\n"; return 0;}
Template class template<typename T> class KeyStorage { public: int key; T member; //a generic member: we don't know its type when creating the class }; int main() //Everything happens to compile time, not to run time //The compiler analyses the way in which you use the class KeyStorage<long> keyElement1; KeyStorage<int> keyElement2; return 0; }
Exercice 3 Faisez un constructeur, un destructeur, un getter et un setter pour la classe de modèle KeyStorage.
Aussi bon… #include <iostream.h> template<typename Tip1, typename Tip2> class KeyStorage { public: int key; Tip1 member1; //a generic member: we don't know its type when creating the class Tip2 member2; }; int main() KeyStorage<long, char> keyElement1; keyElement1.key=1; keyElement1.member1 = 6; keyElement1.member2 = 's'; cout<<keyElement1.key<<keyElement1.member1<<keyElement1.member2<<"\n"; return 0; }
Function Templates template<typename T> T getMax(T a, T b) { return a > b ? a : b; } …………………………………………………….. getMax<int>(2, 3); getMax<double>(3.2, 4.6);
Exercice 4 Considérons la fonction suivante qui échange deux objets: template <class T> void swap(T& ob1, T& ob2) { T aux = ob1; ob1 = ob2; ob2 = aux; } Mettez en oeuvre une fonction qui trie un tableau de N = 5 éléments de type double à l'aide de la fonction ci-dessus.
Exercice 5 Mettez en oeuvre la structure suivante nommée Point: struct Point { //public: int coord_x, coord_y;//the coordinates of a point void reset() //places the point into the origin coord_x = coord_y = 0; } void moveX(int x); //moves the point horizontally with x positions void moveY(int y); // moves the point vertically with y positions void moveXY(int x , int y); // moves the point horizontally and vertically }; Faisez un programme dans lequel on mettre en oeuvre le déplacement d'un point à l'intérieur les coordonnées d'un rectangle ayant les dimensions 1 x N (N étant donné par l'utilisateur), en partant de l'origine. Compilez et exécutez l'application! Ensuite, remplacez struct avec classe et faisez la même chose!
Exercice 6 Considérons la structure de Ex.5 et la fonction suivante qui échange deux objets de type Point! void Schimba(Point &A, Point &B) { int x = A.coord_x; A.coord_x = B.coord_x; B.coord_x = x; int y = A.coord_y; A.coord_y = B.coord_y; B.coord_y = y; } Créez un programme qui trie 5 points, en prenant en compte la distance de l'origine.
Devoir Terminez les exercices donnés en classe!!! Ecrivez un programme en C++ dans laquelle vous définissez une classe nommée BankAccount qui contient les opérations bancaires usuelles (dépôt, retrait, afficher équilibre, propriétaire d'affichage). Testez la classe.