next up previous contents index
suivant: Nom, expression, instruction / monter: main précédent: Fonctions   Table des matières   Index


Types

De façon informelle, les types permettent de classifier les données manipulées par les programmes : caractères, entiers, flottants, tableaux, etc. Cette classification a au moins un intérêt, qui est de pouvoir interpréter et utiliser correctement ces données, alors qu'elles sont représentées en mémoire, de façon uniforme, par des suites de 0 et de 1. Par exemple, la même suite de 0 et de 1 doit être interprétée différemment selon qu'il s'agit d'un entier ou d'un flottant. De plus, ce ne sont pas les mêmes opérations qui seront exécutées sur des entiers ou sur des flottants : ce sont des << unités fonctionnelles >> différentes du microprocesseur qui exécuteront une addition sur des entiers et une addition sur des flottants. Cette notion de type est commune à tous les langages.

Des langages comme Pascal, C, Ada, C++ et Java sont dits fortement typés. Tout nom d'objet doit être déclaré avec son type, tout nom de fonction doit être déclaré avec le type de ses arguments et le type de son résultat. Cela permet d'une part de déterminer la quantité de mémoire nécessaire pour représenter un objet (par exemple, un entier est représenté sur 4 octets, un flottant en double précision sur 8 octets). D'autre part, ces déclarations permettent de vérifier que les expressions sont correctement typées, et que par exemple, on n'appelle pas une fonction avec un argument numérique alors qu'elle a été déclarée avec un paramètre de type tableau. Ces vérifications sont faites par le compilateur, donc avant l'exécution (on dit qu'elles sont statiques). En refusant d'emblée des expressions mal typées, elles permettent d'éviter certaines erreurs qui se produiraient à l'exécution.

C++ offre une grande variété de types d'objets. Il y a des types simples : citons le type vide void, le type char des caractères, le type int des entiers, les types float et double des nombres flottants en simple et double précision et le type bool des booléens. Il y a ensuite des constructeurs de types, qui permettent de définir des types à partir d'autres types : citons les constructeurs [] pour les tableaux, * pour les pointeurs, struct pour les structures, et enum pour les énumérations. On verra par exemple comment définir un type << tableau de 3 pointeurs de structures à deux champs, int et char >>.

Enfin, les bibliothèques de C++ introduisent une profusion de types d'objets utiles au développement de programmes, par exemple le type string des chaînes de caractères, les types istream et ostream des flots d'entrée et de sortie.

Un autre constructeur de type mérite d'être signalé : const. Une expression de type const $T$ est une expression de type $T$ considérée comme constante. Le compilateur vérifie qu'elle ne figure pas à gauche d'une affectation, directement ou indirectement.

Outre les types d'objets, il existe des types références (de constructeur &) et des types fonctionnels. Si $T_1$ et $T_2$ sont des types, on peut former le type des fonctions de $T_1$ vers $T_2$, par exemple, << le type des fonctions de int vers string >>. Signalons que certains constructeurs ne peuvent pas s'appliquer à tous les types ; par exemple, dans un type fonctionnel, $T_2$ ne peut pas être un type de tableaux.


next up previous contents index
suivant: Nom, expression, instruction / monter: main précédent: Fonctions   Table des matières   Index
R Lalement