TP1, Exercice 1.
This commit is contained in:
parent
f825c6e5f5
commit
7db3257e4d
5 changed files with 119 additions and 23 deletions
24
tp/include/coloriable.h
Normal file
24
tp/include/coloriable.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#ifndef HEADER_COLORIABLE
|
||||
#define HEADER_COLORIABLE
|
||||
#include <string>
|
||||
|
||||
class Coloriable {
|
||||
protected:
|
||||
std::string couleur;
|
||||
|
||||
public:
|
||||
Coloriable(std::string coul)
|
||||
{
|
||||
couleur = coul;
|
||||
}
|
||||
std::string getCouleur()
|
||||
{
|
||||
return couleur;
|
||||
}
|
||||
void setCouleur(std::string coul)
|
||||
{
|
||||
couleur = coul;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // HEADER_COLORIABLE
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
class Figure {
|
||||
public:
|
||||
virtual int perimetre()=0;
|
||||
virtual float perimetre()=0;
|
||||
virtual std::string afficherCaracteristiques()=0;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,24 +1,30 @@
|
|||
#ifndef HEADER_POLYGONE
|
||||
#define HEADER_POLYGONE
|
||||
|
||||
#include "figure.h"
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "figure.h"
|
||||
#include "coloriable.h"
|
||||
|
||||
class Polygone : public Figure {
|
||||
public:
|
||||
Polygone(u_int64_t nb_cotes);
|
||||
~Polygone();
|
||||
virtual std::string afficherCaracteristiques() override;
|
||||
virtual int perimetre() override;
|
||||
virtual float perimetre() override;
|
||||
static uint getPolyCount() { return _polycount; };
|
||||
|
||||
protected:
|
||||
u_int64_t _nbcotes;
|
||||
private:
|
||||
static uint _polycount;
|
||||
};
|
||||
|
||||
class Rectangle : public Polygone {
|
||||
public:
|
||||
Rectangle(uint hauteur, uint longueur);
|
||||
virtual std::string afficherCaracteristiques() override;
|
||||
virtual int perimetre() override;
|
||||
virtual float perimetre() override;
|
||||
|
||||
protected:
|
||||
uint _hauteur, _longueur;
|
||||
|
@ -29,15 +35,27 @@ public:
|
|||
Carre(uint cote);
|
||||
};
|
||||
|
||||
class TriangleEquilateral : public Polygone
|
||||
{
|
||||
class TriangleEquilateral : public Polygone {
|
||||
public:
|
||||
TriangleEquilateral(uint cote);
|
||||
virtual std::string afficherCaracteristiques() override;
|
||||
virtual int perimetre() override;
|
||||
virtual float perimetre() override;
|
||||
|
||||
private:
|
||||
uint _cote;
|
||||
float _angle;
|
||||
};
|
||||
|
||||
class Cercle : public Polygone, public Coloriable {
|
||||
public:
|
||||
Cercle(uint rayon, const std::string& couleur);
|
||||
virtual std::string afficherCaracteristiques() override;
|
||||
virtual float perimetre() override;
|
||||
uint getRayon();
|
||||
void setRayon(uint rayon);
|
||||
|
||||
private:
|
||||
uint _rayon;
|
||||
};
|
||||
|
||||
#endif // HEADER_POLYGONE
|
|
@ -1,7 +1,33 @@
|
|||
#include "../include/polygone.h"
|
||||
#include <cstddef>
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* @brief Fonction de test utilisées pour les question 1 à 5
|
||||
*/
|
||||
void test();
|
||||
|
||||
int main(void)
|
||||
{
|
||||
// Le polymorphisme ne fonctionne qu'avec des pointeurs
|
||||
Polygone* polyTab[3] = { new Carre(2), new Cercle(5, "rouge"), new TriangleEquilateral(3) };
|
||||
std::cout << "Polycount: " << Polygone::getPolyCount() << std::endl;
|
||||
for (size_t i = 0; i < Polygone::getPolyCount(); i++) {
|
||||
std::cout << polyTab[i]->afficherCaracteristiques() << std::endl;
|
||||
std::cout << "Perimetre: " << polyTab[i]->perimetre() << std::endl;
|
||||
if (i == 1) {
|
||||
auto cercle = static_cast<Cercle*>(polyTab[i]);
|
||||
std::cout << "Couleur du cercle: " << cercle->getCouleur() << std::endl;
|
||||
}
|
||||
}
|
||||
// Suppression de chaque Polygone dans le tableau
|
||||
while (Polygone::getPolyCount() > 0)
|
||||
delete polyTab[Polygone::getPolyCount() - 1];
|
||||
// ! WARNING: Potential memory leak (je ne sais pas pourquoi...)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void test()
|
||||
{
|
||||
Polygone coolPoly(5);
|
||||
std::cout << coolPoly.afficherCaracteristiques() << std::endl;
|
||||
|
@ -11,4 +37,10 @@ int main(void)
|
|||
std::cout << car.afficherCaracteristiques() << std::endl;
|
||||
TriangleEquilateral tri(5);
|
||||
std::cout << tri.afficherCaracteristiques() << std::endl;
|
||||
Cercle cer(2, "bleu");
|
||||
std::cout << cer.afficherCaracteristiques() << std::endl;
|
||||
std::cout << "Perimetre du cercle: " << cer.perimetre() << std::endl;
|
||||
std::cout << "On change le rayon de 5" << std::endl;
|
||||
cer.setRayon(5);
|
||||
std::cout << "Perimetre du cercle: " << cer.perimetre() << std::endl;
|
||||
}
|
|
@ -1,10 +1,22 @@
|
|||
#include "../include/polygone.h"
|
||||
#include <string>
|
||||
#include "coloriable.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <numbers>
|
||||
#include <string>
|
||||
|
||||
uint Polygone::_polycount = 0;
|
||||
Polygone::Polygone(u_int64_t nb_cotes)
|
||||
: _nbcotes(nb_cotes)
|
||||
{
|
||||
_polycount++;
|
||||
}
|
||||
|
||||
Polygone::~Polygone()
|
||||
{
|
||||
_polycount--;
|
||||
}
|
||||
|
||||
std::string Polygone::afficherCaracteristiques()
|
||||
|
@ -12,10 +24,7 @@ std::string Polygone::afficherCaracteristiques()
|
|||
return std::string("Nombre de cotes : " + std::to_string(_nbcotes));
|
||||
}
|
||||
|
||||
int Polygone::perimetre()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
float Polygone::perimetre() { return 0; }
|
||||
|
||||
Rectangle::Rectangle(uint hauteur, uint longueur)
|
||||
: Polygone(4)
|
||||
|
@ -29,10 +38,7 @@ std::string Rectangle::afficherCaracteristiques()
|
|||
return Polygone::afficherCaracteristiques() + std::string("\tPerimetre :" + std::to_string(perimetre()));
|
||||
}
|
||||
|
||||
int Rectangle::perimetre()
|
||||
{
|
||||
return (2*_longueur)+(2*_hauteur);
|
||||
}
|
||||
float Rectangle::perimetre() { return (2 * _longueur) + (2 * _hauteur); }
|
||||
|
||||
Carre::Carre(uint cote)
|
||||
: Rectangle(cote, cote)
|
||||
|
@ -43,14 +49,30 @@ TriangleEquilateral::TriangleEquilateral(uint cote)
|
|||
: Polygone(3)
|
||||
, _cote(cote)
|
||||
, _angle(60.0f)
|
||||
{}
|
||||
{
|
||||
}
|
||||
|
||||
std::string TriangleEquilateral::afficherCaracteristiques()
|
||||
{
|
||||
return Polygone::afficherCaracteristiques() + std::string("\tPerimetre :" + std::to_string(perimetre()) + "\t Angles :" + std::to_string(_angle));
|
||||
}
|
||||
|
||||
int TriangleEquilateral::perimetre()
|
||||
float TriangleEquilateral::perimetre() { return 3 * _cote; }
|
||||
|
||||
Cercle::Cercle(uint rayon, const std::string& couleur)
|
||||
: Polygone(INFINITY)
|
||||
, Coloriable(couleur)
|
||||
, _rayon(rayon)
|
||||
{
|
||||
return 3*_cote;
|
||||
}
|
||||
|
||||
std::string Cercle::afficherCaracteristiques()
|
||||
{
|
||||
return std::string("Rayon: " + std::to_string(_rayon));
|
||||
}
|
||||
|
||||
float Cercle::perimetre() { return 2 * std::numbers::pi * _rayon; }
|
||||
|
||||
uint Cercle::getRayon() { return _rayon; }
|
||||
|
||||
void Cercle::setRayon(uint rayon) { _rayon = rayon; }
|
Loading…
Add table
Reference in a new issue