Cours C++ GIREF
Séance pratique #4

Exercice 0.

Ajouter une fonction virtuelle pure dans la classe Element:

class Element {
public:
...
virtual int reqNbSommet() const = 0;
...
};

Essayer de recompiler votre code.

Maintenant, écrire la méthode reqNbSommet() pour un Element1D.
 

Exercice 1.

Dans un main, déclarer un pointeur vers un Element (Element*). Ensuite, instancier un objet de type Element1D. Faire porter la valeur de l'adresse de votre nouvel Element1D par votre pointeur:

lPtrElement = &lElement1D;

Faire un appel de fonction (reqNbSommet()) sur votre pointeur:

cout << lPtrElement->reqNbSommet() << endl;
 

Exercice 2.

Écrire une nouvelle classe qui se nommera ElementTriangle et qui héritera publiquement de la classe Element. Ajouter les attributs nécessaires et implanter correctement la méthode reqNbSommet() et imprimeElement().
 

Exercice 3.

Reprendre l'exercice 1, mais instancier en plus un ElementTriangle. Faire pointer le pointeur successivement vers l'Element1D puis l'ElementTriangle et à chaque fois faire l'appel de la méthode reqNbNoeud(). Suivre la trace de l'exécution dans le débogueur.
 

Exercice 4.

Écrire le petit programme suivant et l'exécuter.

#include <vector>

template <class PTType>
void imprimeInfo(const vector<PTType>& pVect)
{
cout << "Size: " << pVect.size()
<< " Capacity: " << pVect.capacity()
<< " &pVect[0]: " << &pVect[0] << endl;
}

int main()
{
vector<double> lVect(3);
imprimeInfo(lVect);

lVect.push_back(10.0);
imprimeInfo(lVect);

lVect.pop_back();
imprimeInfo(lVect);

lVect.reserve(100);
imprimeInfo(lVect);

lVect.resize(10);
imprimeInfo(lVect);
}
 

Exercice 5.

Parcourir toutes les entrées d'un vector et les afficher. Utiliser les itérateurs pour ce faire. Aussi, faire un typedef sur le type de vecteur choisi et utiliser uniquement ce typedef pour aller chercher toutes les définitions nécessaires.
 

Exercice 6.

Remplacer votre vector de l'exemple précédent par une list. Si tout est bien fait, vous n'avez qu'à changer votre typedef. Recompiler.
 

Exercice 7.

Écrire votre conteneur à l'écran. Utiliser un ostream_iterator et la fonction copy:

ostream_iterator<double> lOutput(cout, " ");
copy (lVect.begin(), lVect.end(), lOutput);