Bien j'ai une classe mère (Vehicule) ayant plusieurs type de classe fille (Moto, Voiture).
J'ai également une classe ListeVehicules qui est un vecteur de Moto et de Voiture casté en objet Vehicule.

J'aimerais faire un constructeur de la classe ListeVehicules qui recoit comme paramèttre un vector<Vehicule*>.
Pour cela, je ne sais pas ce qui est le mieux de faire:
- passer en boucle sur chaque objet du vecteur;
- pour chaque objet appeler le constructeur par copie entre deux objets Vehicule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
ListeVehicules::ListeVehicules(vector<Vehicule*> ve)
{
    this->listeV.resize(ve.size());
    for (unsigned int cpt = 0; cpt < ve.size(); cpt ++)
    {
        this->listeV[cpt] = ve[cpt];
    }
}
Ou bien appeler spécifiquement le constructeur de copie des classes filles ?
- passer en boucle sur chaque objet du vecteur;
- tester le type d'objet fille
- en fonction du type appeler le constructeur correspondant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
ListeVehicules::ListeVehicules(vector<Vehicule*> ve)
{
    this->listeV.resize(ve.size());
    for (unsigned int cpt = 0; cpt < ve.size(); cpt ++)
    {
        // getType retourne 1 pour moto, 2 pour Voiture
        switch (ve[cpt]->getType()) 
        {
            case 1:
            {
                this->listeV[cpt] = (Vehicule*) new Moto(*ve[cpt]);
                break;
            }
            case 2:
            {
                this->listeV[cpt] = (Vehicule*) new Voiture(*ve[cpt]);
                break;
            }
        }
     }
}
Est-ce que la première méthode fera d'elle même appel au constructeur de la classe fille correspondant à l'objet?
Ou bien suis-je obligé de tester le type et appeler les constructeurs spécifiques moi même ?