Un langage de programmation hybride La famille C C++ Un langage de programmation hybride CSI2520, Hiver 2007
Historique 1971: C successeur de B 1973: UNIX écrit en C 1983: Apparition du C++ 1987: ANSI C 1998: ANSI C++ CSI2520, Hiver 2007
Quelques caractéristiques du C Petit Faiblement typé Langage structuré Passage par valeur seulement Basé sur l’utilisation de fonctions Même pour les E-S Opérations de bas niveau E.g. sur les bits Pointeurs Les tableaux sont des pointeurs Préprocesseur Définition de constante, macro, programmation multi-fichiers CSI2520, Hiver 2007
Mots clés du C auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while CSI2520, Hiver 2007
Un programme C CSI2520, Hiver 2007
Entrée-sortie en C CSI2520, Hiver 2007
Comparaison avec C++ C est un sous-ensemble de C++ Comporte des caractéristiques de l’OO Allocation dynamique différente Librairie de fonction paramétrisée Surcharge des opérateurs Traitement des exceptions CSI2520, Hiver 2007
Mots clés supplémentaires du C++ asm bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename virtual using wchar_t CSI2520, Hiver 2007
Variables Nom Valeur Type Emplacement Durée de vie Portée Sensibilité aux majuscules Valeur initialisation = ( ) Type entier, réel, booléen, caractère + la constance Emplacement pointeurs Durée de vie statique versus automatique Portée externe versus local, les espaces de noms CSI2520, Hiver 2007
Passage des paramètres par valeur fct(int x); par adresse fct(int *x); par référence fct(int &x); CSI2520, Hiver 2007
Retour de fonctions une valeur une adresse une référence Rien du tout int fct(); une adresse int *fct(); une référence int& fct(); Rien du tout void fct(); Les fonctions peuvent être surchargées CSI2520, Hiver 2007
Structures versus Classes typedef struct { int x,y; } Forme; class Forme { int x,y; public: int aire(); } Abstraction de données versus Abstraction de procédures CSI2520, Hiver 2007
Allocation dynamique En C En C++ int *p; p= (int *)malloc(100*sizeof(int)); free(p); En C++ p= new int[100]; delete[] p; CSI2520, Hiver 2007
Fonctions et classes paramétrisées #include <iostream> using namespace std; template <class T> T GetMax (T a, T b) { T result; result = (a>b)? a : b; return (result); } int main () { int i=5, j=6, k; long l=10, m=5, n; k=GetMax<int>(i,j); n=GetMax<long>(l,m); cout << k << endl; cout << n << endl; return 0; Utilise le préprocesseur Permet l’écriture de fonctions génériques Permet la création de types génériques CSI2520, Hiver 2007
Classes paramétrisées template <class T> class mypair { T values [2]; public: mypair (T first, T second) { values[0]=first; values[1]=second; } }; mypair<int> myobject (115, 36); mypair<double> myfloats (3.0, 2.18); CSI2520, Hiver 2007
Type Abstrait de Données Définition de nouveaux types à l’aide de classes Surcharge des opérateurs Tous les opérateurs peuvent être surchargés Ex: operator+ Existe en version méthode ou fonction CSI2520, Hiver 2007
Exemple class Complex { public: Complex(float re, float im) : myReal(re), myImag(im) {} Complex operator+(Complex c) { Complex sum(myReal+c.myReal, myImag+c.myImag); return sum; } Complex operator+(double re) { Complex sum(myReal+re, myImag); Complex operator+(int re) { float Real(void) { return myReal; } float Imag(void) { return myImag; } private: float myReal; float myImag; }; CSI2520, Hiver 2007
Exemple Complex operator+(double d, Complex c2) { Complex sum(d+c2.Real(), c2.Imag()); return sum; } CSI2520, Hiver 2007
Exemple Complex c1 (1.1, 0); Complex c2 (9,9. 9); double d (1.1); int i (0); c1 + d; // CALL Complex::operator+(double) d + c1; // CALL ::operator+(double,Complex) c1 + i; // CALL Complex::operator+(int) i + c1; c1 + c2; CSI2520, Hiver 2007
Un paradigme: programmation avec ADT Concevoir un programme avec des abstractions indépendantes Un ADT encapsule des données et la définition des opérations qui s’applique L’implantation des opérations est cachée Le programme s’écrit à l’aide de procédures CSI2520, Hiver 2007