// c.f. : http://openclassrooms.com/courses/programmez-avec-le-langage-c/le-polymorphisme-1
#include <iostream>

using namespace std;

class Vehicule {
//==============
public:
void affiche() const; // Affiche une description du véhicule

protected:
int m_prix; // chaque céhicule a un prix
}; // Vehicule

class Voiture: public Vehicule {
//==============================
// Une voiture est un Vehicule
public:
void affiche() const;

private:
int m_portes; // Le nombre de portes de la voiture
}; // Voiture

class Moto : public Vehicule {
//============================
// Une Moto est un Vehicule
public:
void affiche() const;

private:
double m_vitesse; // La vitesse maximale de la moto
}; // Moto

void Vehicule::affiche() const {
//==============================
cout << "Ceci est un vehicule." << endl;
}

void Voiture::affiche() const {
//=============================
cout << "Ceci est une voiture." << endl;
}

void Moto::affiche() const {
//==========================
cout << "Ceci est une moto." << endl;
}

void presenter(Vehicule oV) {
//===========================
//Présente le véhicule passé en argument
oV.affiche();
}

void test01() {
//=============
Vehicule oV;
oV.affiche(); //Affiche "Ceci est un vehicule."

Moto oM;
oM.affiche(); //Affiche "Ceci est une moto."
} // test01

void test02() {
//=============
Vehicule oV;
presenter(oV); //Affiche "Ceci est un vehicule."

Moto oM;
presenter(oM); //Affiche "Ceci est un vehicule." et non "Ceci est une moto."
} // test02

int main() {
//==========
test02();
return 0;
}
