Programmation en C++ et génie logiciel - Livre+compléments en ligne

De
Publié par

Plus qu'un simple apprentissage du langage C++, cet ouvrage se place dans une démarche de Génie logiciel en exposant au fur et à mesure les règles d'un bon développement. Pour chacune des notions de C++ abordées (classes, exceptions, héritages, surcharge...) il explique comment les utiliser avec pertinence, les erreurs à ne pas commettre, et propose des exercices à réaliser sur papier ou sur ordinateur. L'étudiant y trouvera donc à la fois les instructions propres au C++, et les règles immuables pour écrire des programmes propres et clairs dans n'importe quel autre langage.

Publié le : mercredi 16 mai 2007
Lecture(s) : 142
Licence : Tous droits réservés
EAN13 : 9782100528622
Nombre de pages : 256
Voir plus Voir moins
Cette publication est uniquement disponible à l'achat
1 2 3 4 5 6 7
Chapitre3
Les objets
3.1 LE RETOUR DES STRUCTURES Les structures du langage C sont utilisables en langage C++ et ont été étendues en leur permettant de contenir des fonctions. Les structures permettent surtout d’introduire la notion de classe définie dans la section 3.2. Une structure en langage C++ (défi-nissable à l’aide du mot-clefstruct) peut être vue comme une classe sans aucune encapsulation des données. Cela signifie que les membres d’une structure ne sont pas protégés et sont modifiables depuis l’extérieur de la structure. Nous rappelons dans cette section comment définir et manipuler des structures.
3.1.1. Déclarer et définir des structures Ladéclarationd’une structure se fait à l’aide du mot-clefstructet est illustrée dans l’exemple suivant. Elle est identique au langage C sauf en ce qui concerne les fonctions que l’on peut maintenant définir comme étant membres d’une structure.
structSidentite { charpcIDEnom[100] ; charpcIDEprenom[100] ;
voidIDEaffecter nom(const char*pcn) ; voidIDEaffecter prenom(const char*pcn) ;
8 9
1 2 3 4
1 2 3 4
36
voidIDEafficher() ; } ;
3Les objets
Dans cet exemple, nous déclarons une structure (qui permettra d’instancier plusieurs objets) contenant deux champs (desattributs) appeléspcIDEnomet pcIDEprenomet trois fonctions (desopérationsoufonctions membres) appelées IDEaffecter_nom,IDEaffecter_prenometIDEafficher. On notera que la déclaration de la structure se termine nécessairement par;sous peine d’avoir des erreurs de compilation. Notez bien qu’il est également possible de déclarer une structure de la façon suivante :
typedef struct { . . . }Sidentite;
Bien que le résultat soit le même, la seconde déclaration va impliquer moins de flexibilité dans la déclaration d’objets de cette structure (tout cela vous sera expliqué dans la section suivante). Une déclaration de structure qui contient des fonctions membres est nécessaire-ment suivie de ladéfinitionde ces fonctions. À titre d’exemple se trouve ci-dessous la définition de la fonctionIDEafficher.
voidSidentite : :IDEafficher() { printf("%s %s\n",pcIDEprenom,pcIDEnom) ; }
Nous entrons ici dans le cœur des nouveautés du langage C++ par rapport au langage C. En effet, la définition d’une fonction membre nécessite l’utilisation de ce qui s’appellele nom longde la fonction (ligne 1). Ce nom long se décompose, pour les structures, de la façon suivante : type_retour nom_structure : :nom_fonction(liste_parametres) Sémantiquement ce nom signifie : “la fonctionnom_fonctionqui appartient à la structurenom_structurel’”. L’opérateur “ : :” s’appelle opérateur de ré-solution de portéeet définit l’appartenance. Si vous utilisiez le nom de la fonction comme en langage C, que nous appellerons dorénavant lenom court, vous définiriez simplement le code d’une fonction qui n’est pas rattachée à une structure. Par consé-quent, vous auriez une erreur au linkage de votre programme puisque le linkeur serait incapable de déterminer où se trouve le code de la fonction rattachée à la structure.
3.1
Le retour des structures
37
La ligne 3 montre que dans une fonction membre on peut référencer directement les attributs de la structure. Cela veut dire que lorsque ces fonctions seront appelées sur des objets ce sont les attributs de ces objets qui seront utilisés.
3.1.2. Utiliser des structures L’utilisation d’une structure implique la création de variables de ce type, qui seront les objets manipulés. En langage C++ il existe deux façons de déclarer des objets d’une structure comme indiqué dans le code suivant et pour l’exemple de la section précédente.
1voidmain() 2{ 3Sidentite IDEclient1; 4structSidentite IDEclient2; 5 6IDEclient1.IDEaffecter nom("Bon") ; 7IDEclient1.IDEaffecter prenom("Jean") ; 8IDEclient1.IDEafficher() ; 9IDEclient2.IDEaffecter nom("Liguili") ; 10IDEclient2.IDEaffecter prenom("Guy") ; 11IDEclient2.IDEafficher() ; 12}
Les lignes 3 et 4 montrent que la présence du mot-clefstructlors de la décla-ration d’objets est facultative en langage C++ (en fait, le mot-clefstructest toléré pour des raisons de compatibilité avec le langage C). Elle devient interdite si vous avez déclaré votre structure en utilisant le mot-cleftypedefcomme indiqué dans la section précédente. Les lignes 6 à 11 illustrent comment appeler les fonctions de la structure sur les objets créés. Ainsi, la ligne 6 appelle la fonctionIDEaffecter_nomsur l’objet IDEclient1, ce qui va impliquer que son attributpcIDEnomsera égal à la chaîne “Bon”. On retrouve ici la notation pointée des structures du langage C. Il est possible de manipuler directement les chaînes sans passer par les fonctions définies dans la structureSidentite, par exemple en écrivant dans la fonctionmain: strcpy(IDEclient1.pcIDEnom,“Bon”) ; ce qui aurait le même résultat que la ligne 6. On constate ici que l’encapsulation des données n’est absolument pas possible en utilisant les structures : n’importe qui peut faire n’importe quoi sur les attributs de vos structures. Il est également possible de réaliser directement une affectation entre deux objets d’une même structure. Par exemple, on pourrait très bien écrire : IDEclient2=IDEclient1 ;
Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.