Cours c++ Pour Les Nuls
April 14, 2017 | Author: madi0216 | Category: N/A
Short Description
Download Cours c++ Pour Les Nuls...
Description
INTRODUCTION AU C++ Le C++ est un langage parmi d'autres. Tous ne sont pas équivalents et peuvent avoir des utilisations différentes. Je te propose ici de te donner quelques informations qui te permettront de mieux orienter ton apprentissage. Tu sais c'est la partie chiante d'un cours quand le prof commence à raconter sa vie...
L'historique Toutes les machines qui nous entourent fonctionnent grâce à des suites d'impulsions (des bits en base 2: "0" ou "1"). Les premiers programmeurs codaient directement leurs instructions en binaire. Afin de faciliter la communication entre le développeur et la machine, il fut nécessaire de développer une interface, un langage. Dans un premier temps vinrent des langages bas niveau: les assembleurs. Ces langages sont spécifiques à chaque machine et s'adressent directement aux composants constituant celle-ci. C'est en fait une traduction directe du train binaire en instructions simples. (ex: charger en mémoire une valeur, lire une valeur, faire une addition,...) Ensuite, dans un souci de simplicité, les langages devinrent de plus en plus complexes, proches de l'anglais écrit. Se succédèrent alors: BASIC, COBOL, FORTRAN. Notons que plus un langage est dit évolué plus il devient spécifique et facile d'utilisation (nous parlons ici uniquement de la syntaxe). En 1972, Dennis Ritchie créa le C ancêtre du C++. Ce langage peut être qualifié à la fois de bas niveau car il permet de faire appel à toutes les ressources de la machine mais aussi de langage évolué. En effet, il introduit une syntaxe assez complexe par rapport aux langages précités ainsi que de nombreuses fonctions évoluées. Ces fonctions sont regroupées en librairies que tu peux considérer comme des boîtes à outils. La mise à jour la plus marquante du C fut apportée par Bjarde Stroustup en 1982. Il y intégra la programmation objet. Le C++ est en fait une surcouche du C (C++ signifie une incrémentation du C). Il hérite donc de tous les outils du C.
Principe de la programmation objet Trois générations de langage se sont succédés et coexistent encore aujourd'hui: les langages dits linéaires, modulaires puis objets. Tous les premiers langages s'exécutaient de façon linéaire. Chaque ligne du programme était lue puis exécutée jusqu'à la dernière. Il était possible de faire des sauts ou des boucles mais le principe restait le même. Cette approche simpliste ne pouvait pas s'appliquer à des programmes complexes. De plus, les développeurs ne pouvaient pas réutiliser des outils déjà écrits. Le langage assembleur est un exemple de langage linéaire. Afin, de réutiliser le code et d'éviter les redondances, les langages dits modulaires virent le jour. Le principe est de regrouper un ensemble d'instructions dans des fonctions ou procédures. En effet, chaque tâche exécutée par un programme représente un nombre variable d'instructions. Ces instructions sont réunies afin de pouvoir segmenter le code et de favoriser la réutilisation de celui-ci. Le C fait partie de ces langages.
Enfin, la méthode objet apparue. Elle est en fait une évolution de l'approche modulaire. Elle lui apporte principalement trois aspects primordiaux: •
L'encapsulation: cette technique permet de réunir des variables et des fonctions au sein d'une même entité nommée classe. Les variables sont appelées les données membres, les fonctions sont appelées les méthodes. L'accès aux données et méthodes peut-être aussi réglementé.
•
L'héritage: cette technique permet de définir une hiérarchie de classe. Chaque classe fille hérite des méthodes et des données de ces "pères". En pratique, la classe de base est une classe générique, ainsi plus on descend dans la hiérarchie, plus on spécialise cette classe.
•
Le polymorphisme (non ce n'est pas un gros mot!): nous verrons que les objets sont définis par leur classe (sorte de moule). Pour expliquer le polymorphisme, retenons que deux objets, héritant une même méthode d'une classe parente, peuvent réagir de façon différente à l'appel de cette méthode. Par analogie, nous pouvons considérer l'exemple débile de l'ascenseur et de la bombe nucléaire... ben oui... Ces deux objets descendent de l'objet machine et donc héritent de la fameuse fonction "bouton rouge" que chaque machine possède. Maintenant, je te mets au défi d'appuyer sur le bouton rouge d'un ascenseur: c'est beaucoup plus violent que pour la bombe nucléaire. En effet, dans le cas de la bombe H, elle pète loin de toi sur un atol de Polynésie, alors que les coups de balais de ton gardien qui te coure dans la cage d'escalier, ça tu les sens! L'appel de la même fonction a donc entraîné un comportement différent.
Au cas où tu n'aies pas suivi les dernières notions, ne t'inquiète pas. Premièrement, rappelle toi que tu es un (gros) nul et fier de l'être : NULL POWER, deuxièmement ces notions sont vues en détail dans la partie 2 du cours.
Quel type d'utilisation? Saches tout d'abord que le C++ est le langage le plus utilisé par la communauté des développeurs. Ce langage est utilisé aussi bien sur UNIX que MacOS ou Windows. Entre autres, la plupart des applications graphiques comportent une partie en C++, ce qui inclut les traitements de textes, utilitaires, jeux,... Toutefois, il ne faut pas croire que tout est possible avec le C++ ou au contraire que c'est un langage dépassé face au Java ou C#. Tu verras, si l'informatique devient ton métier, que l'on ne peut pas se limiter à un seul langage. Le choix du langage est souvent imposé par différents facteurs: portabilité, rapidité, disponibilité de composants déjà écrits, outils de développement,... En fait, nous ne rentrerons pas dans un débat stérile afin de savoir quel langage est le plus avancé technologiquement. Le C++ est ici un choix d'apprentissage. En effet, à cause de sa conception le C++ hérite des langages modulaires et objets. Il n'est ni totalement objet ni restreint à un langage modulaire de type C. Ce conflit de génération qui rend le C++ un peu "bâtard" est un avantage pour les débutants. En fait, lorsque tu auras fini cet apprentissage tu auras la possibilité et la compétence de t'orienter tout seul vers le langage de ton choix. Je te rappelle aussi que ce site à pour vocation de t'apprendre les bases de la programmation. Il n'a pour l'instant pas l'ambition de se spécialiser dans un sous-ensemble du C++. Il ne sera donc pas fait question d'environnement graphique ou de développement spécialisé dans une technologie donnée (Microsoft DirectX, Open GL, Linux, réseau,...)
Différence C/C++ Le C++ introduit un certain nombre d'améliorations syntaxiques, d'extensions et de nouveautés par rapport au C, dont les principales sont essentiellement liées à la programmation orientée objet. On peut décomposer le langage en C++=C+E+S+P avec: •
C désigne la norme AINSI C
•
E représente les écarts à la norme
•
S représente les spécificités de C++ non liées à la théorie objet
•
P représente les possibililités de la programmation objet (la programmation objet n'est pas imposée)
Pour le néophyte, ces différences ne poseront aucun problème. Pour la personne qui sait déjà programmer en C, les quelques incompatibilités ou différences seront exposées tout le long du cours.
Conclusion Une fois les connaissances de ce site acquises, il te sera facile de trouver des ouvrages permettant d'aller plus loin dans l'apprentissage du C++. Tu passeras alors du stade "gros nul" au stade "nul mais se soigne".
OUTILS DE PROGRAMMATION
Nous allons commencer par la prise en main d'un outil de programmation. Après ce cours tu pourras écrire un programme basique, le corriger (tout le monde ne s'appelle pas Billou), le compiler puis l'exécuter. C'est top, non?
Introduction Les applications réalisées à partir de ce site se présenteront sous la forme d'une console du type Dos pour les adorateurs du WindowsPlanté et du MacOsTropCher.Quant aux fans de Linux ou autres Unix, nul besoin de leur présenter leur cher Shell. En fait, ces applications seront semblables à ce que l'on trouve sur calculette: les informations s'affichent sous forme de texte uniquement, le curseur clignotant te permet d'entrer des informations lorsque c'est nécessaire; la validation se fait grâce à la touche Enter. Nous allons nous appuyer sur un outil appelé DevC++ qui a l'avantage d'être gratuit et très clair. Nul ne t'empêche d'utiliser un autre éditeur/compilateur. Pour trouver en une liste non exhaustive, cliquez ici. Et si tu cherches une assurance: par là, ou un site de funboard, par ici. Enfin si tu es décidé à aller plus loin ça se passe sur cette page! Non mais!
Compilation On peut dès maintenant créer l'application correspondante. Pour cela, utilise le bouton compile ou dans le menu Execute clique sur Compile. Cette fenêtre permet de voir l'évolution de la compilation des fichier C++. Pour lancer l'application ainsi créée, il suffit d'appuyer sur le bouton Execute. Il ne se passe rien (une fenêtre apparaît puis disparaît)
L'application est créée dans le même dossier que le projet. Tu peux aussi la lancer en double cliquant sur son icône.
Premier Programme Par tradition, tout apprentissage d'un nouveau langage commence par l'affichage du message "Hello World". C'est en fait l'opération la plus simple que l'on puisse apercevoir. Tape le code suivant ou récupère le fichier associé, puis compile à nouveau le projet (le fichier doit être inclus dans le projet et visible dans la fenêtre projet).
#include #include void main() {
cout[ne renvoie rien après compilation et exécution] >Appuyer sur une touche pour quitter! > #include Les premières lignes de code servent à introduire des informations utiles au compilateur: directive du préprocesseur. Ici on lui demande d'inclure la librairie iostream.h qui gère les fonctions standards d'entrée et de sortie d'informations (entrée/sortie). Ce sont les fonctions qui te permettront d'écrire à l'écran ou de rentrer des données par le clavier. De même, si on veut utiliser des fonction du type mathématique (cos, sin,...), il faudra inclure la bibliothèque math.h par le code: #include . void main() Ce sont des mots clefs introduisant le corps du programme principal. Sachez dès maintenant que void veut dire néant et que main veut dire principal. Tous programmes en C++ nécessitent un point d'entrée qui constitue la première fonction appelée dans ton programme: c'est le rôle de la fonction main(). Elle est appelée automatiquement lors de l'exécution du programme. Comme void l'indique notre fonction ne renvoie rien. Nous aurions pu choisir de renvoyer un entier en écrivant int main() par exemple. Mais ne sois pas pressé, ce point fait partie du cours sur les fonctions, alors patience! De plus, tu peux remarquer que main() est suivi de parenthèses. C'est le cas pour toutes fonctions. Les parenthèses servent à passer des arguments à la fonction, c'est-à-dire des données. Pour plus de détails et d'exemples concrets sur ce point tu peux encore aller jeter un oeil du côté des fonctions! Dans notre cas, les parenthèses sont vides, cela veut dire que notre fonction ne prend pas d'arguments, elle n'a besoin d'aucune donnée extérieure pour fonctionner. {} Le programme principal est délimité par les deux accolades, {}, une ouvrante, une fermante. Le contenu de ces deux accolades constitue un bloc d'instruction. Note qu'il est préférable lors de l'écriture du code de fermer une accolade juste après l'avoir ouverte. Ainsi, tu
éviteras de te poser les questions du type Pourquoi ça ne marche pas ? alors qu'il suffisait de fermer l'accolade! Comme dans l'exemple, l'alignement vertical et le décalage du code par rapport à celles-ci permettent aussi une lecture et un déboggage plus aisée du code. En pratique, utilise les tabulations qui te permettent d'aligner facilement ton code. Attention, cette convention n'est pas obligatoire, mais elle te facilitera la vie! ";" A l'intérieur d'un bloc d'instruction, chaque ligne se termine par un point virgule, ;. Chaque ligne représente alors une "phrase" indépendante des autres, interprétée séparément par le compilateur, appellée une instruction. int grosNul; Cette instruction correspond à la déclaration d'une variable de type int (entier) nommée grosNul. Attention! Le C++ fait la différence entre les majuscules et les minuscules, les variables GrosNul et grosNul ne sont donc pas les mêmes: on dit que le C++ respecte la casse. Elles seront détaillées plus loin. Tu remarqueras que cette ligne se finit par un point virgule (;). C'est donc une instruction. L'absence du ; entraînerait une erreur de compilation. La ligne suivante comporte l'initialisation de la variable grosNul à 0: l'entier grosNul contient maintenant 0. Remarque que le C++ ne tient pas compte des espaces: grosNul=0 signifie la même chose que grosNul = 0. Tu peux donc aérer ton code pour qu'il soit le plus lisible possible. Ne prête pas attention aux 3 dernières lignes du programme. Tu les comprendras par la suite. Elles sont là seulement pour éviter que l'application ne se ferme d'elle-même. Il te suffit d'appuyer sur une touche pour quitter le programme.
Les commentaires: Reprenons le même morceau de code: #include void main() { int grosNul; grosNul = 0;
//ne retourne rien /* grosNul est un entier valant 0 */
char fin; //pour éviter que cout, > vont dans le sens du flux.
Voyons un exemple de saisie: #include void main() { int grosNul; cin >> grosNul; cout -0.38196 >Appuyer sur une touche pour quitter! >
>Les
Opération logique: ce type d'expression permet de stocker le résultat d'une opération logique dans une variable. Ce résultat peut prendre deux états booléens: vrai (différent de 0) ou faux (égal à 0). C'est à dire que lors de l'exécution du programme l'ordinateur va évaluer si l'expression est vraie ou fausse. Par exemple, 3>2 est une expression ayant comme opérateur logique le signe > ; cette expression renvoie le booléen Vrai (1). Les opérateurs logiques existant sont les suivants:
Mot Clef <
Signification inférieur à inférieur ou égal à supérieur à
==
supérieur ou égal à égal à
&&
ET logique
||
OU logique
!=
différent de
>=
Exemple int resultat=23; //resultat=0 c'est faux
int
resultat=(2>=(4/2)); //resultat=1 c'est vrai
resultat=2==3; //resultat=0 c'est faux int resultat=(2==2) && (3==2); //resultat=0 c'est faux int resultat=(2==2) || (3==2); //resultat=1 c'est vrai int resultat=2!=3; //resultat=1 c'est vrai int
Ces opérateurs sont très utiles dans le cas des boucles et branchements conditionnels vus plus tard. Opération d'incrémentation et de décrémentation : ces opérateurs sont incontournables pour les langages dont la syntaxe est héritée du C, ce qui est le cas du C++. Derrière ce terme barbare (à prononcer avec un accent suédois) ce cache un mécanisme très simple. L'incrémentation est l'ajout de 1 à une variable numérique ou à un caractère, la décrémentation est la suppression de 1. Voilà la liste de ces opérateurs :
Mot Clef
Syntaxe
Equivalence
++
x++;
++
y=x++;
y=x; puis x=x+1;
++
y=++x;
x=x+1; puis y=x;
--
x--;
--
y=x--;
y=x; puis x=x-1;
--
y=--x;
x=x-1; puis y=x;
x=x+1;
x=x-1;
L'incrémentation et la décrémentation peuvent être postfixées (après la variable) ou préfixées (avant la variable). Dans le cas où l'opérateur est préfixé, l'ajout ou la suppression se fait avant l'allocation donc pour un opérateur postfixé l'allocation se fait avant l'ajout ou la suppression. C'est assez bête dit comme cela mais c'est régulièrement source d'erreurs. Entre nous, tu ne trouves pas qu'il est long ce chapitre? Je t'invite à de détendre un peu: prends une pause, ferme les yeux, pense à une île paradisiaque avec la femme ou l'homme de tes rêves... STOP! Faut pas déconner quand même, on n'est pas là pour rigoler, allez hop, exercices: •
Exercice n°1: Division euclidienne
•
Exercice n°2: Incrementation
•
Exercice n°3: Un peu de logique
Conversion Tu as vu que chaque variable possède un type qui déterminera quel type de valeur il est susceptible de contenir. Il n'existe pas de mécanisme permettant de changer le type d'une variable, pourtant il est tout à fait possible de convertir une valeur et de stocker le résultat dans une variable de type adéquat. Prenons un exemple: imaginons que l'on veuille stocker la valeur entière de Pi (3) qui est un décimal (3,14..). Il suffit alors de convertir la valeur de Pi en entier (int) puis stocker cette valeur dans une autre variable de type entièr. Il existe trois mécanismes de conversion: La conversion implicite: Tu vas dire que je t'agresse encore avec des mots savants. C'est en fait la conversion la plus simple car le compilateur se charge de la réaliser pour toi. Dans la plupart des cas, si tu essayes d'initialiser une variable avec une valeur qui ne correspond pas à son type, le compilateur fera la conversion de façon " implicite ".
#include void main() { int entier= 3.14; char caractere= 65; int entier2='A'; double decimal=entier;
//float dans int //int dans char //char dans int //int dans double
coutAppuyer sur une touche pour quitter! > Cette méthode est très utile dans l'emploi des fonctions et des objets. En effet, les fonctions vues plus tard imposent le type des arguments demandés et peuvent ne pas faire de conversion implicite. Néanmoins, je te conseille de l'utiliser le plus souvent possible: ton code sera plus intelligible et moins tu seras assisté par le compilateur mieux tu identifieras les erreurs. Les fonctions de conversion: Tu verras l'utilisation des fonctions dans le chapitre suivant. Pourtant, sache qu'il existe des fonctions fournies avec tous les environnements C et C++ (fonctions standards). Certaines de ces fonctions te permettent de convertir des variables vers des types différents. Voici, un exemple que tu comprendras sûrement mieux grâce au chapitre suivant:
#include int ctoi(char a) { return (a-'0'); } void main() { char caractere= '2'; int entier1, entier2; entier1=(int)caractere; entier2=ctoi(caractere); cout Après, la variable x vaut a > Appuyer sur une touche pour quitter!
>
Et non, ce n'est pas une erreur ! Tu remarques que la valeur de x n'a pas changé. C'est ce que je t'explique depuis une heure ! C'est parce que tu as fait un passage par valeur. A l'appel de la fonction zorro (désolé), la valeur de x ('a') a été recopiée dans la variable lettre. La valeur de lettre a été modifiée en 'z', mais x reste inchangé ! Bon, mais comment faire alors pour modifier de cette façon une variable passée en argument ? Et bien continue de lire, c'est écrit… Passage par référence Lors d'un passage par référence, tu peux manipuler à l'intérieur de la fonction la valeur d'une variable externe passée en paramètre. Pour pouvoir passer une variable par référence, rien de plus simple ! Il te suffit d'ajouter le symbole & devant un paramètre de ta fonction à la suite du type. Ce symbole permet de passer la variable elle-même et non une copie. Etudie l'exemple précédant modifié en conséquence :
#include void zorro(char &lettre) { lettre = 'z' ; }
// declaration de la fonction // zorro qui modifie // la caractere passe en // parametre
void main() { // programme principal char x = 'a' ; int buf ;
// declaration et initialisation cout
View more...
Comments