User Tools

Site Tools


in204:tds:sujets:td7:part2

This is an old revision of the document!


Partie II – Destructeurs

Nous créons les classes suivantes :

class GraphicalObject 
{
    public:       
       virtual void draw () const = 0 ; 
       ~GraphicalObject() { std::cout << "& Delete GraphicalObject \n"; }
 
};
 
class Line: public GraphicalObject 
{
    public:
       virtual void draw () const { std::cout << "Line"; } ; 
       ~Line() { std::cout << "Delete Line\n"; }
 
};
 
class Circle: public GraphicalObject 
{
    public:
       virtual void draw() const { std::cout << " Circle"; } ; 
       ~Circle  () { std::cout << "Delete Circle  \n"; }
 
};

Nous créons le tableau d’objet suivant :

std::vector<GraphicalObject*> createGraphicalObjects(
    int theSize)
{
    std::vector<GraphicalObject*> graphicalObjects(theSize);
    for(int i=0; i < size; i++)
    {
       graphicalObjects[i] = new Line();
       graphicalObjects[i++] = new Circle();
    }
    return graphicalObjects;
}
 
Nous définissons une fonction de dession pour l'ensemble des éléments 
dans le tableau.
<code cpp>
 
void drawGraphicalObjects(std::vector<GraphicalObject*>& theGraphicalObjects)
{
    for(auto it = theGraphicalObjects.begin(); 
        it < theGraphicalObjects.end(); it++)
    {
       delete it->draw();
    }
}

Nous créons la fonction de destruction du tableau suivante:

void deleteGraphicalObjects(std::vector<GraphicalObject*>& theGraphicalObjects)
{
    for(auto it = theGraphicalObjects.begin(); 
        it < theGraphicalObjects.end(); it++)
    {
       delete *it;
    }
}

Et nous testons avec le code suivant :

auto graphicalObjects = createGraphicalObjects(10);
deleteGraphicalObjects(graphicalObjects);

Question n°1

Justifier la sortie produite à l’écran ? Est-ce que c’est le comportement désiré ?

Question n°2

Proposer une modification pour obtenir le comportement souhaité.

Tester après cette modification.

in204/tds/sujets/td7/part2.1572776902.txt.gz · Last modified: 2019/11/03 10:28 by bmonsuez