Utilisation du compilateur
La compilation et l'édition de lien se passent de la même manière que pour le C :
-
Créez un fichier
essai.cppavec un programme simple qui affiche bonjour en utilisant les fonctions d'entrée/sortie du C++. -
Compilez ce programme :
g++ -o essai essai.cpp. -
Créez un deuxième fichier
fonction.cppavec une fonction affichant je suis une fonction. -
Compilez ces deux fichiers séparément (option
-cdu compilateur), puis faites l'édtion de liens (g++ -o essai essai.o fonction.o). -
Essayez de remplacer
g++pargcclors de l'édition de liens. Comment pouvez-vous expliquer les erreurs ?
Utilisation d'un Makefile
Par la suite, pour éviter de devoir en permanence ces lignes de commande, nous allons utiliser un Makefile. make est un outil permettant de gérer automatiquement les dépendances et donc de ne recompiler que ce qui est utile.
-
Créez un fichier appelé
Makefileavec le contenu suivant :
essai: essai.o fonction.o
g++ -o essai essai.o fonction.o
essai.o: essai.cpp
g++ -c essai.cpp
fonction.o: fonction.cpp
g++ -c fonction.cpp
Avertissement : les lignes 2, 4 et 6 doivent commencer par une tabulation
-
Tapez la commande
make.
Vous pouvez en fait omettre les quatre dernières lignes : make contient des règles implicites pour la compilation des fichiers C++. Si vous utilisez ces règles, vous pouvez préciser les options de compilation avec la variable CXXFLAGS.
Constructeurs et paramètres
Nous allons manipuler quelques constructeurs. Compilez et exécutez le programme suivant :
#include <iostream> #include <cstdlib> struct Point { static int compteur; int x,y; Point() { compteur++; std::cout << "Contructeur vide de Point" << std::endl; } Point(int _x,int _y) { x=_x; y=_y; compteur++; std::cout << "Contructeur de Point avec initialization" << std::endl; } }; int Point::compteur=0; int main() { Point p; Point p2(100,100); Point p1=p2; Point tab[10]; Point &p3=p2; Point *tab1=new Point[10]; Point *tab2=(Point *)malloc(sizeof(Point)*10); std::cout << "nombre de constructions: " << Point::compteur << std::endl; }
-
Vérifiez le décompte final du nombre d'appels aux constructeurs.
-
Il y a deux anomalies, lesquelles ?
-
Une des lignes de ce programme est dangereuse, pourquoi ?
-
L'autre anomalie peut aussi conduire à des problèmes, lesquels ?
-
Transformez la structure en classe, rajoutez des accesseurs et modifiez les droits d'accès aux endroits qui vous semblent nécessaires.
-
Ajoutez une fonction membre
Addition, qui prend en paramètre un point et qui ajoute ses coordonnées à celles du point courant. Quel mode de passage de paramètre est le mieux adapté ? -
Écrivez une fonction (non membre)
Additionqui prend deuxPointsen paramètres, et qui retourne unPoint. -
Appelez la fonction membre et la fonction non-membre avec des objets temporaires. Par exemple :
p2=Addition(p1, Point(10,20));
Comptez les appels aux constructeurs. Expliquez chaque appel.