Vous êtes sur la page 1sur 7

Chapitre 7 : Dcoupe dun programme C++

On a vu que :
La structure dun programme est gnralement
1. 2. 3. 4. 5. #include de fichiers Dfinition de constantes globales Dfinition de types globaux Dfinition de fonctions main()

Tout identificateur (y compris de fonction) utilis doit dabord tre dclar

Dcoupe dun programme C++ En fait pour les identificateurs, 2 notions existent:
Dclaration :
spcifie son nom spcifie ses caractristiques externes

Dfinition :
spcifie galement ses caractristiques internes dtermine lendroit o il y a rservation de mmoire, initialisation,
On peut avoir plusieurs dclarations mais une seule dfinition
2

Dclaration de prototype Exemple:


void PrintCar(char c, int nb); //dclaration = prototype

main() { PrintCar('*', 70); //PrintCar a t dclar avant et est donc connu PrintCar('_', 50); } void PrintCar(char c, int nb); //dfinition // imprime une ligne avec nb caractres c { for(int i=0; i<nb; ++i) Parfois il est impossible de cout << c; Tout dfinir avant de lutiliser! cout << endl; 3 (rcursivit croise) }

Fichier de dclaration et compilation spare


En C++, on peut crire un programme qui utilise des modules dfinis dans dautres fichiers Chaque fichier peut tre compil sparment Avant lexcution, ldition des liens permet de faire un excutable qui appelle les bons modules Exemple:
Un fichier matrice.cpp contenant les fonctions de manipulation de matrices Un fichier main.cpp contenant le programme main (+ ventuellement dautres) main.cpp et matrice.cpp doit avoir les diffrentes dclarations globales (constantes, types, ) main.cpp doit avoir les dclarations des fonctions dfinies dans matrice.cpp
4

Exemple de compilation spare Solution: on gnre systmatiquement pour chaque groupe de modules dfinis, 2 fichiers
Un fichier nom.cpp contenant la dfinition des fonctions Un fichier nom.h de dclarations de constantes et types globaux et contenant tous les prototypes dfinis dans le fichier nom.cpp Ainsi tout fichier utilisant ce module peut facilement avoir toutes les dclarations en incluant le fichier nom.h.
5

Exemple : solution sans dcoupe


// Fichier main.cpp #include <iostream.h> const int M=5,L=3,N=4; typedef int MatML[M][L]; typedef int MatLN[L][N]; typedef int MatMN[M][N]; void ProduitDeMatrice(MatML A, MatLN B, MatMN C) /*Produit de matrices C = A*B*/ { for(int i=0; i<M; ++i) for(int j=0; i<N; ++j) { C[i][j] = 0; for (int k=0; k<L; ++k) C[i][j] += A[i][k]*B[k][j]; } } main() { MatML X; MatLN Y; MatMN Z; ProduitDeMatrice(X,Y,Z); }

Exemple : solution avec dcoupe


//Fichier Matrice.h //Fichier main.cpp const int M=5,L=3,N=4; typedef int MatML[M][L]; typedef int MatLN[L][N]; typedef int MatMN[M][N]; void ProduitDeMatrice(MatML A, MatLN B, MatMN C); //prototype #include <iostream.h> //pour cin,cout #include "Matrice.h" //inclus les //cstes,types et prototypes main() { MatML X; MatLN Y; MatMN Z; ProduitDeMatrice(X,Y,Z); }

//Fichier Matrice.cpp #include "Matrice.h" //inclus les // cstes&types void ProduitDeMatrice(MatML A, MatLN B, MatMN C) /*Produit de matrices C = A*B*/ { for(int i=0; i<M; ++i) for(int j=0; i<N; ++j) { C[i][j] = 0; for (int k=0; k<L; ++k) C[i][j] += A[i][k]*B[k][j]; } 7 }

Il faut compiler tous les fichiers .cpp

Vous aimerez peut-être aussi