#include <string>
class vehicule // création de la classe voiture
{
	private:
	int vitesseMax;
	int kmCompteur;
	public:
	vehicule(int v, int k)
	{
		setVitesseMax(v);
		setKmCompteur(k);
	}
	void setVitesseMax(int vitesse)
	{
		vitesseMax=vitesse;
	}
	void setKmCompteur(int km)
	{
		kmCompteur=km;
	}
	void affiche() //fonction qui affiche des infos sur la voiture
	{
		cout << "vitesse maximale constatée: " << vitesseMax << "\n";
		cout << "Nombre de KM au compteur: " << kmCompteur << "\n";
	}
};

class vehiculeImmatricule : public vehicule // Création de cette classe qui dépend de la classe voiture
{
	private:
	string noImmat;
	public:
	vehiculeImmatricule(string i, int v, int k) : vehicule(v,k)
	{
		setNoImmat(i);
	}
	void setNoImmat(string immat)
	{
		noImmat=immat;
	}
	void affiche() // on affiche des infos sur le vehiculeImmmatricule
	{
		cout << "Numero d'immatriculation: " << noImmat << "\n";
		vehicule::affiche(); //on execute la fonction affiche() de la classe parent (ici : vehicule::affice())
	}
};

class voiture : public vehiculeImmatricule // création de cette classe dépendant de vehiculeImmatricule
{
	private:
	int nbPortes;
	public:
	voiture(int p, string i, int v, int k) : vehiculeImmatricule(i,v,k)
	{
		setnbPortes(p);
	}
	void setnbPortes(int portes)
	{
		nbPortes=portes;
	}
	void affiche() // on affiche des infos sur la voiture
	{
		cout << "je suis une voiture disposant de " << nbPortes << "\n";
		vehiculeImmatricule::affiche(); //on execute la fonction affiche() de la classe parent (ici : vehiculeImmatricule::affice())
	}
};

class camion : public vehiculeImmatricule // création de cette classe dépendant de vehiculeImmatricule
{
	private:
	int nbEssieux;
	public:
	camion (int n, string i, int v, int k) : vehiculeImmatricule(i,v,k)
	{
		setnbEssieux(n);
	}
	void setnbEssieux(int essieux)
	{
		nbEssieux=essieux;
	}
	void affiche() // on affiche des infos sur le camion
	{
	cout << "je suis un camion disposant de " << nbEssieux << "\n";
		vehiculeImmatricule::affiche(); //on execute la fonction affiche() de la classe parent (ici : vehiculeImmatricule::affice())
	}
};
void main(void)
{
	
	//instantiation de voiture
	voiture * voiture1=new voiture(5,"123KP13",180,12000);
	voiture1->affiche(); //affichage
	cout << "\n";
	
	//instantiation de voiture
	voiture * voiture2=new voiture(5,"435TB75",120,17840);
	voiture2->affiche(); //affichage
	cout << "\n";
	//instantiation de camion
	camion * camion1=new camion(8,"4325TR54",130,54000);
	camion1->affiche(); //affichage
	cout << "\n";
	//instantiation de camion
	camion * camion2=new camion(8,"243YY65",110,13333);
	camion2->affiche(); //affichage
}
