C++ est orienté objet, dans le sens où il prend en charge le paradigme orienté objet pour le développement de logiciels.
Cependant, à la différence de Java, le C++ ne vous oblige pas à regrouper les définitions de fonctions dans des classes : la façon standard de déclarer une fonction en C++ est de déclarer simplement une fonction, sans classe.
Si, au contraire, vous parlez de la déclaration/définition d'une méthode, la méthode standard consiste à placer uniquement la déclaration dans un fichier include (normalement nommé .h
o .hpp
) et la définition dans un fichier d'implémentation séparé (normalement nommé .cpp
o .cxx
). Je suis d'accord pour dire que c'est en effet quelque peu ennuyeux et que cela nécessite une certaine duplication, mais c'est ainsi que le langage a été conçu (le concept principal est que la compilation C++ se fait une unité à la fois : vous avez besoin du .cpp de l'unité en cours de compilation et seulement du .h de toutes les unités utilisées par le code compilé ; en d'autres termes, le fichier include d'une classe doit contenir toutes les informations nécessaires pour pouvoir générer du code qui utilise la classe). Il y a BEAUCOUP de détails à ce sujet, avec différentes implications sur la vitesse de compilation, la vitesse d'exécution, la taille du binaire et la compatibilité binaire.
Pour des expériences rapides, tout fonctionne... mais pour des projets plus importants, la séparation est quelque chose de pratiquement nécessaire (même s'il peut être judicieux de conserver certains détails d'implémentation dans le .h public).
Note : Même si vous connaissez Java, le C++ est un langage complètement différent... et c'est un langage qui ne peut pas être appris en expérimentant. La raison est qu'il s'agit d'un langage assez complexe avec beaucoup d'asymétries et de choix apparemment illogiques, et surtout, lorsque vous faites une erreur, il n'y a pas d'"anges d'erreur d'exécution" pour vous sauver comme en Java... mais il y a plutôt des "démons de comportement indéfini".
La seule façon raisonnable d'apprendre le C++ est de lire... aussi intelligent que vous soyez, vous n'avez aucun moyen de deviner ce que le comité a décidé (en fait, être intelligent est parfois même un problème car la bonne réponse est illogique et une conséquence de l'héritage historique).
Il suffit de choisir un bon livre ou deux et les lire de bout en bout.
1 votes
Il y a en fait 3 options ici. Votre deuxième exemple pourrait avoir la définition de la fonction dans le fichier d'en-tête (mais toujours pas inlined), ou dans un fichier séparé de
.cpp
fichier.0 votes
Cette question pourrait vous aider à comprendre.
3 votes
Juste une note : déclaration est toujours à l'intérieur de la classe, mais définition est soit intérieur, soit extérieur. Le titre et le corps de la question doivent être soumis à s/declaration/definition/ Vous ne me croyez pas ? stackoverflow.com/q/1410563/1143274
1 votes
Les définitions de fonctions à l'intérieur des classes doivent être évitées. Elles sont considérées comme implicitement
inline
.0 votes
@JohnStrood donc ?
inline
n'assouplit que la règle d'une seule définition, ce qui est nécessaire si une autre unité de traduction utiliseClazz