Présentation
EnglishRÉSUMÉ
Le langage C++, développé à partir de C, est un langage orienté objet qui a l'avantage d'avoir une base très répandue. IL laisse donc au programmeur la possibilité d'adopter un style plus ou moins orienté objet. Cet article présente les évolutions et les apports de C++ par rapport à C. Puis les spécificités de C++ sont abordées plus en détail : classes, héritages, surdéfinition d'opérateurs, polymorphismes, etc.
Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.
Lire l’articleAuteur(s)
-
Claude DELANNOY : Ingénieur de l’ENSEM (École nationale supérieure d’électricité - et de mécanique) de Nancy - Ingénieur informaticien au CNRS (Centre national de la recherche scientifique)
INTRODUCTION
La programmation orientée objet (en abrégé POO) est dorénavant universellement reconnue pour les avantages qu’elle procure. Notamment, elle améliore largement la productivité des développeurs, la robustesse, la portabilité et l’extensibilité de leurs programmes. Enfin, et surtout, elle permet de développer des composants logiciels entièrement réutilisables.
Un certain nombre de langages dits « langages orientés objet » (LOO) ont été définis de toutes pièces pour appliquer les concepts de POO. C’est ainsi que sont apparus dans un premier temps des langages comme Smalltalk, Simula ou Eiffel, puis Java. Le langage C++, quant à lui, a été conçu suivant une démarche quelque peu différente par B. Stroustrup (AT&T) ; son objectif a été, en effet, d'adjoindre au langage C un certain nombre de spécificités lui permettant d'appliquer les concepts de POO. Ainsi, C++ présente-t-il sur un vrai LOO l'originalité d'être fondé sur un langage répandu. Cela laisse au programmeur toute liberté d'adopter un style plus ou moins orienté objet, en se situant entre les deux extrêmes que constituent la poursuite d'une programmation classique d'une part, une pure POO d'autre part. Si une telle liberté présente le risque de céder, dans un premier temps, à la facilité en mélangeant les genres (la POO ne renie pas la programmation classique - elle l'enrichit), elle permet également une transition en douceur vers la POO pure, avec tout le bénéfice que l'on peut en escompter à terme.
De sa conception jusqu'à sa normalisation, le langage C++ a quelque peu évolué. Initialement, un certain nombre de publications de AT&T ont servi de référence au langage. Les dernières en date sont : la version 2.0 en 1989, les versions 2.1 et 3 en 1991. C’est cette dernière qui a servi de base au travail du comité ANSI (American National Standard Institute) lequel, sans la remettre en cause, l'a enrichie de quelques extensions et surtout de composants standards originaux se présentant sous forme de fonctions et de classes génériques que l’on désigne souvent par le sigle STL (Standard Template Library). La norme définitive de C++ a été publiée en juillet 1998.
Cet article est extrait de l’ouvrage « Programmer en langage C++ » du même auteur, paru aux éditions Eyrolles [5].
DOI (Digital Object Identifier)
Cet article fait partie de l’offre
Automatique et ingénierie système
(139 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Présentation
7. Fonctions virtuelles et polymorphisme
Par le biais du mécanisme des fonctions virtuelles, C++ permet de réaliser la ligature dynamique des fonctions membres et, partant, de mettre en oeuvre le polymorphisme. Il s’agit là d’un concept extrêmement puissant qui permet d’appliquer une même opération à des objets de types différents, sans qu’il ne soit nécessaire d’en connaître le type exact. Avant de présenter les fonctions virtuelles, nous commencerons par montrer les contraintes qui pèsent sur le choix d’une méthode dans un contexte d’héritage.
7.1 Typage statique des objets
Les règles de compatibilité entre une classe de base et une classe dérivée permettent d'affecter à un pointeur sur une classe de base la valeur d'un pointeur sur une classe dérivée. Toutefois, par défaut, le type des objets pointés est défini lors de la compilation.
class Aclass B : public A
{.....{.....
public :public :
void fct (...) ;void fct (...) ;
..........
} ;} ;
A * pta ;
B * ptb ;
Dans cet exemple, une affectation telle que pta = ptb est autorisée. Néanmoins, quel que soit le contenu de pta (autrement dit, quel que soit l'objet pointé par pta), pta->fct(...) appelle toujours la fonction fct de la classe A.
HAUT DE PAGE7.2 Fonctions virtuelles
L'emploi des fonctions virtuelles permet d'éviter les problèmes inhérents au typage statique. Lorsqu'une fonction est déclarée virtuelle (mot clé virtual) dans une classe, les appels à une telle fonction ou à n'importe laquelle de ses redéfinitions dans des classes dérivées sont "résolus" au moment de l'exécution, selon le type de l'objet concerné. On parle de typage dynamique des objets (ou de ligature dynamique des fonctions).
class Aclass B : public A
{.....{.....
public :public :
virtual void fct (...) ;void fct (...) ;
..........
};} ;
A * pta ;
Dans cet exemple, l'instruction pta->fct (...) appellera la fonction fct de la classe correspondant réellement au type de l'objet pointé par pta.
On notera que, par nature, le mécanisme de ligature dynamique est limité à une hiérarchie...
Cet article fait partie de l’offre
Automatique et ingénierie système
(139 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Fonctions virtuelles et polymorphisme
BIBLIOGRAPHIE
-
(1) - MEYER (B.) - Object-Oriented Software Construction - . C.A.R. Hare Series Editor, Englewood Cliffs, NJ: Prentice Hall, 1988.
-
(2) - STROUSTRUP (B.) - The C++ Programming Langage - , Third Edition. Reading, MA : Addison-Welsley Publishing Company, 1997.
-
(3) - STROUSTRUP (B.) - Le langage C++, - Troisième édition. CampusPress France, 1999.
-
(4) - LIPPMAN (S.B.) - C++ Primer - , Third Edition. Reading, MA : Addison-Welsley Publishing Company, 1998.
-
(5) - DELANNOY (C.) - Programmer en langage C++ - , cinquième édition. Éditions Eyrolles, 61 boulevard St Germain – 75240 Paris, 2002.
-
(6) - DELANNOY (C.) - Exercices en langage C++ - , nouvelle édition. Édition Eyrolles, 61, boulevard St Germain – 75240 Paris, 2002.
-
...
Cet article fait partie de l’offre
Automatique et ingénierie système
(139 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive