Héritage multiple, polymorphisme et classe abstraite

Fermé
BobTheBob08 Messages postés 2 Date d'inscription lundi 22 octobre 2012 Statut Membre Dernière intervention 31 octobre 2012 - Modifié par BobTheBob08 le 22/10/2012 à 23:07
BobTheBob08 Messages postés 2 Date d'inscription lundi 22 octobre 2012 Statut Membre Dernière intervention 31 octobre 2012 - 31 oct. 2012 à 12:57
Bonjour, je n'arrive pas à ajouter un rectangle avec ses paramètres. Voir section en gras classe EnsembleFormes ci-dessous. Comment aller chercher les paramètres du rectangle dans les classes correspondantes (exemple la couleur dans la classe Affichable). Merci pour votre aide!

class Affichable
{
public:
virtual void affiche() const;

protected:
string couleur_;
int epaisseur_;
};

class Forme
{
public:
virtual void affiche() const;
virtual double calculerAire() const=0;
virtual double calculerPerimetre() const=0;
int getX() const;
int getY() const;
void setX(int x);
void setY(int y);

private:
int x_;
int y_;
};

class Point
{
public:
Point(double x=0.0, double y=0.0);
double longSegment() const;
double getX() const;
double getY() const;
void setX(double x);
void setY(double y);
void affiche() const;

private:
double x_;
double y_;
};

class Rectangle: public Affichable, public Forme
{
public:
Rectangle();
Rectangle(Point p1, Point p2, Point p3, Point p4, string couleur, int epaisseur, int x, int y);
virtual void affiche() const;
virtual double calculerAire() const;
virtual double calculerPerimetre() const;
double getLargeur() const;
double getLongueur() const;

private:
Point p1_;
Point p2_;
Point p3_;
Point p4_;
};

class Cercle: public Affichable, public Forme
{
public:
Cercle(double rayon, Point* centre, string couleur, int epaisseur, int x, int y);
virtual void affiche() const;
virtual double calculerAire() const;
virtual double calculerPerimetre() const;

private:
double rayon_;
Point* centre_;
};

class EnsembleFormes
{
public:
EnsembleFormes();
~EnsembleFormes();
void EnsembleFormes::ajouterForme(Forme& figure)
{
if (typeid(figure) == typeid(Rectangle))
{
if (!appartient(figure))
{
// Comment ajouter un rectangle avec ses informations:
//(Point p1, Point p2, Point p3, Point p4, string couleur, int epaisseur, int x, int y)
vecFigure_.push_back(new Rectangle(???));
}
}
}

bool appartient(Forme& figure) const;
int cardinal() const;
void afficherForme() const;

private :
vector<Forme*> vecFigure_;
};

1 réponse

DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
31 oct. 2012 à 09:39
EnsembleFormes(); & ~EnsembleFormes(); sont respectivement le constructeur et le destructeur de ta classe, lorsque tu vas instancier ta classe avec un objet ( EnsembleFormes *MonObj = new EnsembleFormes(p1, p2, p3, p4, couleur, epaisseur, x, y ) tu vas tout simplement créer un objet => MonObj, qui aura comme caractèristique p1, p2, p3, p4, couleur, epaisseur, x ,y,

tu pourras accéder à ces caractéristiques avec la styntaxe =
MonObj->p1
MonObj->p2
MonObj->p3 ....

et ton constructeur aura la forme EnsembleFormes(Point p1, Point p2, Point p3, Point p4, string couleur, int epaisseur, int x, int y)
{
p1 = this->p1
p2 = this->p2
....
}

déclare bien les variables de ta classe en private ou en public et le tour est joué
0
BobTheBob08 Messages postés 2 Date d'inscription lundi 22 octobre 2012 Statut Membre Dernière intervention 31 octobre 2012
31 oct. 2012 à 12:57
Merci beaucoup pour les précisions.
0