Académique Documents
Professionnel Documents
Culture Documents
en C++
Master 1 INS3I
TP 4 : Matrices P.-A. Hébert
2018–2019
Consignes
Dans ce TP vous allez concevoir 3 classes destinées à représenter des matrices :
sans gestion de la mémoire, puis de manière dynamique (automatisée, puis manuelle).
Chacun des 10 tableaux (les éléments de reels) représente une ligne possible de la matrice
(10 lignes sont réservées, mais la matrice peut en exploiter moins que 10).
De même, chaque colonne est constituée de 10 variables float, mais rien n’empêche d’en
exploiter moins.
C’est pourquoi, les dimensions effectives de chaque objet Matrice1 devront être mémorisées
dans l’objet, en plus de son espace de 10 × 10 éléments.
Q 1. Dans le fichier d’en-tête de cette classe, matrice1.hpp, proposez une déclaration mini-
male de cette classe, comprenant - outre ses données membres :
— un constructeur par défaut : qui crée une matrice de dimensions 0 × 0 ;
— un constructeur permettant d’initialiser une matrice de dimensions demandées (si
possible), dont toutes les valeurs sont nulles ;
— un autre constructeur très similaire au précédent, mais qui permet de choisir la valeur
initiale de ses éléments (tous égaux là encore).
Et vous testerez au fur et à mesure ses fonctions dans un fichier source indépendant :
main.cpp, qui essentiellement la fonction main.
Q 3. Proposez une méthode (à la fois accesseur et mutateur), qui renvoie une référence sur
l’élément de la matrice désigné par ses coordonnées.
Puis surchargez l’opérateur [] avec ce traitement.
Q 4. Écrivez une méthode d’ajout, qui ajoute à chaque élément de la matrice invoqué,
l’élément correspondant de la matrice passée en paramètre.
Puis surchargez l’opérateur += pour effectuer ce traitement.
Q 5. Recommencez pour pouvoir ajouter à tout élément de la matrice, une valeur constante
réelle.
Q 6. Écrivez une fonction réalisant l’opération d’addition, sans utiliser la structure interne
de la matrice. Vous en ferez par conséquent une fonction externe à la classe.
Dans cette première version, la gestion dynamique sera automatisée, car prise en charge par
une classe conteneur de la STL : vous remplacerez les std::array par des std::vector.
Ce sont les méthodes de la classe qui feront les allocations et désallocations mémoire relatives
aux éléments des objets Matrice2.
Il n’y a donc plus de limite de dimensions. Assurez-vous de bien répercuter le passage des
std::array aux std::float partout dans le code source de la classe.
2
Q 1. Dans un fichier matrice2.hpp proposez la définition de la nouvelle classe matrice, en
reprenant les consignes précédentes, à quelques différences près :
— les éléments de la matrice étant gérés de manière dynamique, à base d’instructions new
et delete, chaque objet Matrice3 aura besoin d’un pointeur pour conserver l’adresse
de leur espace mémoire.
Les données de la matrice pourront être stockées les unes derrière les autres, ligne par
ligne. Mais il est également aussi possible de gérer des tableaux de tableaux, comme
dans les versions précédentes (mais cette fois-ci de manière dynamique et explicite).
— l’espace mémoire des données de la matrice sera alloué consécutivement à l’alloca-
tion/définition de l’objet Matrice3 (et donc dans son constructeur).
— il sera par ailleurs désalloué consécutivement à la désallocation de l’objet Matrice3
(et donc dans son destructeur).