Généralités
Puisque cela n’est pas foncièrement utile, je vous fais grâce de l’historique du langage C++. Vous devez juste savoir, éventuellement, qu’il a été conçu par Bjarne Stroustrup, ce qui aide pour trouver l’excellente bible du C++, écrite par lui-même[1].
Pour commencer cette présentation, parlons de quelques généralités, et d’abord du pourquoi du C++.
C’est avant tout une nécessité de répondre à des besoins générés par de gros projets. Ils nécessitent une façon de travailler plus rigoureuse, pour un code plus structuré, extensible, réutilisable et enfin si possible, portable. Ceci est assez limité lorsque l’on emploie un langage simplement structuré tel que C ou Turbo Pascal.
Programmation Orientée Objet
La Programmation Orientée Objet (P.O.O.) est une solution. Elle permet d’introduire le concept d’objet justement, qui consiste en un ensemble de données et de procédures qui agissent sur ces données.
Lorsque l’objet est parfaitement bien écrit, il introduit la notion fondamentale d’Encapsulation des données. Ceci signifie qu’il n’est plus possible pour l’utilisateur de l’objet, d’accéder directement aux données : il doit passer par des méthodes spécifiques écrites par le concepteur de l’objet, et qui servent d’interface entre l’objet et ses utilisateurs. L’intérêt de cette technique est évident : l’utilisateur ne peut pas intervenir directement sur l’objet, ce qui diminue les risques d’erreur, ce dernier devenant une "boîte noire".
Une autre notion importante en P.O.O. est l’héritage. Elle permet la définition d’une nouvelle classe à partir d’une classe existante. Il est alors possible de lui adjoindre de nouvelles données, de nouvelles fonctions membres (procédures) pour la spécialiser.
Différences entre C et C++
Nous allons parler ici d’un certain nombre de différences existant entre le C et le C++. Nous pourrions d’ailleurs plutôt utiliser le terme d’incompatibilités.
Les fonctions
Les fonctions en C peuvent être définies suivant deux modèles :
int CalculeSomme ( a, b )
int a;
int b;
{
... /* Fonction */
}
int CalculeSomme ( int a, int b )
{
... /* Fonction */
}
int a;
int b;
{
... /* Fonction */
}
int CalculeSomme ( int a, int b )
{
... /* Fonction */
}
Il faut simplement savoir que le C++ n’accepte que la seconde méthode.
Const
Le C++ a quelque peu modifié l’utilisation "C" de ce qualificatif. Pour rappel, "
const
" est utilisé pour définir une variable constante. C’est une bonne alternative à un define
.
La portée en C++ est désormais plus locale. En C, un
const
permettait pour une variable globale d’être "visible" partout. C++ limite quant à lui la portée d’une telle variable, au fichier source contenant la déclaration.Compatibilité de pointeurs
En C ANSI, un "
void*
" est compatible avec tout autre type de pointeurs, et inversement.
Par exemple, ceci est légal en C :
/* C */
void * pQqch; /* Pointeur générique */
int * pEntier; /* Pointeur sur un entier */
pEntier = pQqch;
pQqch = pEntier;
void * pQqch; /* Pointeur générique */
int * pEntier; /* Pointeur sur un entier */
pEntier = pQqch;
pQqch = pEntier;
Ces affectations font intervenir des conversions implicites. En C++, seule la conversion
int* --› void*
est implicite. L’autre reste possible, mais nécessite ce que l’on nomme un "cast" :
// C++
void * pQqch; // Pointeur générique
int * pEntier; // Pointeur sur un entier
pEntier = (int*)pQqch; // "cast" en entier
void * pQqch; // Pointeur générique
int * pEntier; // Pointeur sur un entier
pEntier = (int*)pQqch; // "cast" en entier
Aucun commentaire:
Enregistrer un commentaire