Cours de C et C++
![Cours de C et C++](/images/remos_downloads/id-2257.2257.pdf_thumb_prev.jpg)
Cours de C et C++ méthodes et explications
...
Programmation Orienté Objet
La programmation orienté objet est une nouvelle méthode de programmation qui tend à se rapprocher de notre manière naturelle d'appréhender le monde. La
P.O.O. s’est surtout posé la question "Sur quoi porte le programme ?".
En effet, un programme informatique comporte toujours des traitements, mais aussi et surtout des données. Si la programmation structurée s'intéresse aux traitements puis aux données, la conception objet s'intéresse d'abord aux données, auxquelles elle associe ensuite les traitements, il est donc intéressant d'architecturer le programme autour de ces données.
Caractéristiques de Programmation Orienté Objet
Les caractéristiques de la Programmation Orienté Objet sont :
- Exactitude : aptitude d’un programme à fournir les résultats voulus, dans des conditions normales d’utilisation.
- Extensibilité : facilité avec laquelle un programme pourra être adapté pour satisfaire à une évolution des spécifications.
- Réutilisabilité : possibilité d’utiliser certaines parties (modules) d’un programme pour résoudre un problème.
- Portabilité : facilité avec laquelle on peut exploiter un même programme dans des différentes implémentations.
- Efficience : temps d’exécution, taille mémoire…
Concepts de Programmation Orienté Objet
1- Objet:
L’Objet est une représentation informatique des éléments du monde réel. La
P.O.O est fondé sur le concept d’objet, à savoir une association des données et des procédures (qu’on appelle des méthodes) agissant sur les données.
L’objet est une entité atomique, caractérisé par des données et des méthodes.
Méthode+Données= Objet
Les données :sont à l'objet ce que les variables sont à un programme, ce sont des variables stockant des informations d’état de l’objet.
Les méthodes : sont les éléments d'un objet qui servent d'interface entre les données et le programme.
Programmation Orienté Objet
1- Objet:
Programmation Orienté Objet
2- Classe:
On appelle classe la structure d’un objet, c’est-à-dire la déclaration de l’ensemble des entités qui composeront un objet. Les objets de même nature ont en général la même structure et le même comportement. La classe factorise les caractéristiques communes de ces objets et permet de les classifier. Un objet est donc, une instanciation d’une classe, c’est la raison pour laquelle on pourra parler indifféremment d’objet ou d’instance (éventuellement d’occurrence). Toutes les instances d'une classe constituent l'extension de la classe.
Programmation Orienté Objet
3- Encapsulation :
Le concept d’encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d’une structure en cachant l’implémentation de l’objet, c’est-à-dire en empêchant l’accès aux données par un autre moyen que les services proposés. L’encapsulation permet donc de garantir l’intègrité des données contenues dans l’objet.
L’encapsulation permet de définir des niveaux de visibilité des éléments de la classe. ces niveaux de visibilité définissent les droits d’accès aux données selon que l’on y accède par une méthode.
Programmation Orienté Objet
3- Encapsulation :
Il existe trois niveaux de visibilité :
- Publique : Les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d’une classe définie avec le niveau de visibilité public. Il s’agit du plus bas niveau de protection des données.
- Protégée : l’accès aux données est réservé aux fonctions des classes héritières, c’est-à-dire par les fonctions membres de la classe ainsi que des classes dérivées.
- Privée : l’accès aux données est limité aux méthodes de la classe elle-même. Il s’agit du niveau de protection des données le plus élevé.
Programmation Orienté Objet
3- Encapsulation :
L’encapsulation permet de garder une cohérence dans la gestion de l'objet, tout en assurant l'intégrité des données qui ne pourront être accédées qu'au travers des méthodes visibles.
Programmation Orienté Objet
3- Encapsulation :
Il existe trois niveaux de visibilité :
- Publique : Les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d’une classe définie avec le niveau de visibilité public. Il s’agit du plus bas niveau de protection des données.
- Protégée : l’accès aux données est réservé aux fonctions des classes héritières, c’est-à-dire par les fonctions membres de la classe ainsi que des classes dérivées.
- Privée : l’accès aux données est limité aux méthodes de la classe elle-même. Il s’agit du niveau de protection des données le plus élevé.
Programmation Orienté Objet
4- Héritage:
L’héritage est un principe propre à la programmation orientée objet, permettant de créer une nouvelle classe à partir d’une classe existante. Le nom d’héritage (ou parfois dérivation de classe) provient du fait que la classe dérivée (la classe nouvellement créée ou bien classe fille) contient les attributs et les méthodes de sa superclasse (la classe dont elle dérive ou bien classe mère).
L’intérêt majeur de l’héritage est de pouvoir définir de nouveaux attributs et de nouvelles méthodes pour la classe dérivée, qui viennent s’ajouter à ceux et celles héritées.
Programmation Orienté Objet
4- Héritage:
Certains langages orientés objet, tels que le C++, permettent de faire de l’héritage multiple, ce qui signifie qu’ils offrent la possibilité de faire hériter une classe de deux superclasse. Ainsi, cette technique permet de regrouper au sein d’une seule et même classe les attributs et les méthodes de plusieurs classes.
Programmation Orienté Objet
4- Héritage:
Programmation Orienté Objet
5- Polymorphisme :
Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique essentielle de la programmation orientée objet caractérise la possibilité de définir plusieurs fonctions de même nom mais possédant des paramètres différents (en nombre et/ou en type), si bien que la bonne fonction sera choisie en fonction de ses paramètres lors de l’appel.
(cruccure de 6ase du fangage (++
Langage C++
Le langage C++ est une amélioration du langage C (le langage C a été mis au point par M.Ritchie et B.W.Kernighan au début des années 70). Bjarne Stroustrup, un ingénieur considéré comme l'inventeur du C++, a en effet décidé d'ajouter au langage C les propriétés de l'approche orientée objet. Ainsi, vers la fin des années 80 un nouveau langage, baptisé C with classes (C avec des classes), apparaît. Celui-ci a ensuite été renommé en C++, clin d'œil au symbole d'incrémentation ++ du langage C, afin de signaler qu'il s'agit d'un langage C amélioré (langage C+1).
Langage C++
Le C++ reprend la quasi-intégralité des concepts présents dans le langage C, si bien que les programmes écrits en langage C fonctionnent avec un compilateur C++. En réalité le langage C++ est un surensemble du C, il y ajoute, entre autres, des fonctionnalités objet :
- L'encapsulation
- L'héritage (simple et multiple)
- Le polymorphisme
Ainsi qu'un ensemble de nouvelles fonctionnalités, parmi lesquelles :
- Le contrôle de type
- Les arguments par défaut
- La surcharge de fonctions
- Les fonctions inline…
Types des variables
1- Types:
Les données manipulées en langage C++ sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le nombre d'octets) de la donnée ainsi que sa représentation.
Le type des données peut être :
- Simple;
- Composé.
Types des variables
Les types élémentaire en langage C++ sont :
➢ int : entiers (au min 16 bits, pour des valeurs 32767), d’autres formats existent: long int (min 32 bits), short int, unsigned int ;
➢ float, double et long double : nombres à virgule flottante ;
➢ char : caractères (’a’,’b’,. . . ’A’,. . . ,’:’,. . . );
➢ bool : booléens (’true’ ou ’false).
(Et: 0 équivalent à false, tout entier non nul équivaut à false)
Définition des variables
Le syntaxe pour la définition d’une variable est :
Type var1[=val1], var2[=val2], …;
Exemple: int p=2 ;
double x ;
➢ Une variable peut être déclarée n'importe où dans un bloc pourvu que sa déclaration soit placée avant son utilisation. Contrairement, en langage C, il est obligatoire de la déclarer au début de bloc.
➢ Les valeurs d'initialisations (val1, val2, …) peuvent être des expressions
quelconques, elles peuvent faire intervenir des variables déjà déclarées, mais initialisée n'importe où dans un bloc, alors qu'en C, elles ne peuvent faire intervenir que des variables initialisées lors de leurs déclaration au début du bloc.
Définition des variables
Code correcte en C et en C++. Dans cet exemple, l'expression d'initialisation de q lors de sa définition fait intervenir la variable n déjà initialisée lors de sa définition au début du bloc.
int n = 2;
int q = 2 * n -1;
Code correcte en C++, mais pas en C. Dans cet exemple, la déclaration tardive de q permet de l'initialiser avec une expression qui fait intervenir la variable n dont la valeur n'était pas connue au moment de sa définition au début du bloc.
int n; n = 2;
int q = 2 * n -1;
Constantes
La Syntaxe d’un constante en langage C++ est : const type nom = val ;
Par exemple: const float Pi = 3,14 ;
Il ne sera pas possible de modifier Pi dans le reste du programme (erreur à la compilation).
Chaînes de caractères
Pour le langage C++, il existe une classe string, ce n’est un pas un type élémentaire.
Pour l’utiliser, il faut placer en tête du programme :
# include
➢ string s: définit s comme une variable;
➢ string s = "bonjour" ;
➢ string t= « tout le monde"
➢ s.size() représente la longueur de s;
➢ s[i] est le i-ème caractère de s ( i = 0,1,. . . s.size()-1)
➢ s+t est une nouvelle chaîne correspondant à la concaténation de s et t.
Tableaux
Le syntaxe pour la déclaration des tableaux en langage C++: type Nom_du_tableau [Nombre d'éléments]
➢ L'indice du premier élément du tableau est 0 ;
➢ Un indice est toujours positif ;
➢ L'indice du dernier élément du tableau est égal au nombre d'éléments – 1;
➢ int tab [5]: tableau de 5 entiers ;
➢ tab.size() : correspond à la taille de tab;
➢ tab[7] = 6 : affecte la valeur 6 au huitième élément du tableau;
➢ int Toto[10] = {0}: initialise tous les éléments du tableau à zéro;
➢ int Tableau [3][4] : définit Un tableau d'entiers positifs à deux dimensions (3 lignes, 4 colonnes).
Expressions
1- Affectation:
En C/C++, l’affectation est une expression. Soient v une variable et expr une expression.
v = expr
Ce instruction permet d’affecter la valeur de expr à la variable v et retourne la valeur affectée à v comme résultat.
Par exemple, i = (j = 0) affecte 0 à j puis à i et retourne 0.
Expressions
2- Opérateurs classiques:
➢ Opérateurs arithmétiques : *, +, -, / (division entière et réelle), % (modulo);
➢ Opérateurs de comparaison :<, <= , ==, >, >=, !=;
➢ Opérateurs booléens: && représente l’opérateur “ET”, || représente le “OU”, et ! représente le “NON”.
Expressions
3- Pré et Post incrément :
➢ ++var incrémente la variable var et retourne la nouvelle valeur (++i équivaut à i=i+1).
➢ var++ incrémente la variable var et retourne l’ancienne valeur (i++ équivaut
à (i=i+1)-1).
➢ --var décrémente la variable var et retourne la nouvelle valeur.
➢ var-- écrémente la variable var et retourne l’ancienne valeur.
Entrées-Sorties
1- Affichage :
Pour utiliser les entrées/sorties en langage en C++, il faut ajouter cette ligne:
# include
Pour afficher des données sur l’écran, on utilise le flot de sortie cout.
cout désigne un flot de sortie prédéfini associé à la sortie standard (par défaut, c’est l'écran).
cout << expr1 << expr2 << … << exprn;
➢ expr1, expr2, …, exprn sont des expressions de type quelconque (caractère, entier, flottant, chaîne de caractères, pointeur, …).
➢ << : est un opérateur binaire dont l'opérande de gauche est un flot de sortie (ici cout) et l'opérande de droite une expression de type quelconque.
➢ Le résultat fourni par l'opérateur <<, quand-il reçoit un flot en premier opérande est ce même flot.
Entrées-Sorties
1- Affichage :
Exemple:
int n = 25;
cout << "Valeur : "; cout << n;
Ces deux instructions peuvent
s'écrire :
cout << "Valeur : " << n;
➢ L'instruction : cout << "Valeur : "; signifie que le flot cout reçoit la valeur du type chaîne de caractères "Valeur : ".
➢ L'instruction : cout << "Valeur : " << n; est équivalente à :
(cout << "Valeur : ") << n;
= cout
Entrées-Sorties
1- Affichage :
➢ cout est un objet de la classe prédéfinie ostream ;
➢ Le mot clé endl sert à insérer un saut de ligne et à vider le tampon de sortie ;
➢ Pour sauter une ligne, on peut aussi utiliser le caractère '\n'.
Entrées-Sorties
2- Lecture :
Pour lire des données à partir du clavier sur l’écran, on utilise le flot d’entré cin.
cin désigne un flot d'entrée prédéfini associé à l'entrée standard (par défaut, c’est le clavier).
cin >> var1 >> var2 >> … >> varn;
➢ var1, var2, …, varn sont des variables de type de base quelconque (caractère, entier, flottant, chaînes de caractères).
➢ >> : est un opérateur binaire dont l'opérande de gauche est un flot d'entrée (ici cin) et l'opérande de droite est une variable dans laquelle on souhaite écrire une information.
➢ Le résultat fourni par l'opérateur >>, quand-il reçoit un flot en premier opérande est ce même flot.
Commentaires
Les commentaires en langage C++ sont représentés par deux barres obliques accolées (//). Le commentaire peut démarrer à n'importe quel endroit et s'étend jusqu'à la fin de ligne.
Instructions
1- Boucle IF :
Le syntaxe de la boucle « if else » dans le langage C++ est :
if (expr) instruction
if (expr) instruction1 else instruction 2
Exemples:
if (v == 3) i =i+4 ;
if ((v==3) && (i<5))
{ i=i+4 ;
v=v*2 ;} else v=i ;
r = r*3 ;
Instructions
1- Boucle FOR :
Le syntaxe de la boucle « for » dans le langage C++ est :
for (expr1 ;expr2 ;expr3) instruction (s)
Exemples :
for(i=0 ;i
Instructions
1- Boucle WHILE :
Le syntaxe de la boucle « while » dans le langage C++ est :
while (expr) instruction (s)
Instructions
1- Boucle DO :
Le syntaxe de la boucle « do while » dans le langage C++ est :
do instruction (s) while (expression(s)) ;
Instructions
Le langage C++ permet l’utilisation d’autre instructions:
➢ break provoque l’arrêt de la première instruction do, for, switch ou while englobant.
➢ continue provoque (dans une instruction do, for, ou while) l’arrêt de l’itération courante et le passage au début de l’itération suivante.
➢ switch (expression) {
case cas1 : liste d’instructions1
...
case casn : liste d’instructionsn default: liste d’instructions
}
Instructions
(exp) ? exp1 : exp2 vaut exp1 si exp est évaluée à vrai et exp2 sinon.
m = (i < j) ? i : j
var op= expr désigne l’expression var = var op expr (op prend les opérandes {+,-,*,/,%})
int i=2,j=34 ; int i=2,j=34 ;
i += 2 ; i = i+2 ;
j *= 10 ; j = j*10 ;
j *= (i++) ; j = j*i ;
i = i+1 ;
Structure générale d’un programme
Un programme C++ est reparti dans un ou plusieurs fichiers. Chacun peut contenir des définitions/déclarations de fonctions, des définitions de types et des définitions de variables globales.
Il existe une seule fonction main: c’est la fonction qui sera exécutée après la compilation.
Le profil de main est : int main() ou void main().
Portée, visibilité, durée de vie des variables
1- Portée:
La portée d’un identificateur correspond aux parties du programme où cet identificateur peut être utilisé sans provoquer d’erreur à la compilation.
La portée d’une variable globale ou d’une fonction globale est égale au programme.
La portée d’une variable locale va de sa définition jusqu’`a la fin de la première instruction composée ({...}) qui contient sa définition.
Deux variables peuvent avoir le même nom mais dans ce cas, elle doivent avoir
deux port es différentes.
Portée, visibilité, durée de vie des variables
1- Portée:
Exemple :
{
{
}
}
int i=3 ; int i=5 ;
cout << i ; // affiche 5
cout << i ; // affiche 3
Les deux variables ont des portées différentes
Portée, visibilité, durée de vie des variables
2- Visibilité:
➢ La visibilité d’une variable dit quand elle est accessible;
➢ La durée de vie d’une variable correspond à la période depuis création é sa destruction.
L’espace mémoire d’une variable locale déclarée static est alloué une seule fois et n’est détruit qu’à la fin du programme !
void Test(int v)
{
static int compteur=0 ; compteur++ ;
cout << compteur << "-eme appel de Test"<< endl ; cout << " v = " << v << endl ;
}
Sa duréee de vie est celle du programme.
Fonctions
1- Définition d’une fonction :
Le C++ ne permet de faire que des fonctions, pas de procédures. Une procédure peut être faite en utilisant une fonction ne renvoyant pas de valeur ou en ignorant la valeur retournée.
La définition des fonctions se fait comme suit :
type identificateur(paramètres)
{
/* Instructions de la fonction */
}
Type : le type de la valeur renvoyée; Identificateur : le nom de la fonction; Paramètres : la liste de paramètres.
Fonctions
1- Définition d’une fonction :
Remarque : L’initialisation des paramètres de fonctions n’est possible qu’en
C++, le C n’accepte pas cette syntaxe.
La valeur de la fonction à renvoyer est spécifiée en utilisant la commande return, dont la syntaxe est : return valeur.
Fonctions
1- Définition d’une fonction :
Exemple d’une fonction en C++:
int somme(int i, int j)
{
return i+j;
}
Si une fonction ne renvoie pas de valeur, on lui donnera le type void. Si elle n’attend pas de paramètres, sa liste de paramètres sera void ou n’existera pas. Il n’est pas nécessaire de mettre une instruction return à la fin d’une fonction qui ne renvoie pas de valeur.
Fonctions
- 1- Définition d’une procédure :
Exemple d’une procédure en C++:
void rien() /* Fonction n’attendant pas de paramètres */
{ /* et ne renvoyant pas de valeur. */ return; /* Cette ligne est facultative.
}
Fonctions
2- Appel d’une fonction:
L’appel d’une fonction se fait en donnant son nom, puis les valeurs de ses paramètres entre parenthèses.
S’il n’y a pas de paramètres, il faut quand même mettre les parenthèses, sinon la fonction n’est pas appelée.
Si la déclaration comprend des valeurs par défaut pour des paramètres (C++ seulement), ces valeurs sont utilisées lorsque ces paramètres ne sont pas fournis lors de l’appel. Si un paramètre est manquant, alors tous les paramètres qui le suivent doivent eux aussi être omis. Il en résulte que seuls les derniers paramètres d’une fonction peuvent avoir des valeurs par défaut.