1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
#include <iostream>
#include <string>
#include <vector>
using namespace std;
typedef string Forme ;
typedef string Couleur ;
class Brique
{
private:
Forme forme ;
Couleur couleur ;
public:
Brique(Forme f, Couleur c)
{forme=f;
couleur=c;
};
ostream& afficher(ostream& sortie) const {
if(couleur.empty()==false){
sortie<<"("<<forme<<", "<<couleur<<")";}
else{
sortie<<forme;}
return sortie;
}
friend std::ostream& operator <<(std::ostream&, const Brique&);
};
std::ostream& operator <<(std::ostream& Stream, const Brique& Obj){
Obj.afficher(Stream);
return Stream;
}
class Construction
{
friend class Grader;
public: vector<vector<vector<Brique>>> contenu;
public:Construction(Brique b):contenu (1, vector<vector<Brique>>(1,vector<Brique> (1, b))){
}
ostream& afficher(ostream& sortie) const {
for(int i(0); i < (int)contenu.size(); i++) {
for(int j(0); j < (int)contenu[i].size(); j++) {
for(int k(0); k < (int)contenu[i][j].size(); k++) {
contenu[i][j][k].afficher(sortie);}}}
return sortie;
}
void operator^=(Construction const& b)
{
for(int i(0); i < (int)contenu.size(); i++) {
contenu.push_back(b.contenu[i]);
}
}
};
std::ostream& operator <<(std::ostream& Stream, const Construction& Obj){
Obj.afficher(Stream);
return Stream;
}
int main()
{
// Modèles de briques
Brique toitD("obliqueD", "rouge");
Brique toitG("obliqueG", "rouge");
Brique toitM(" pleine ", "rouge");
Brique mur (" pleine ", "blanc");
Brique vide (" ", "");
cout << toitD;
//Tester Construction
Construction c(mur);
Construction c1(toitD);
c^= c1;
cout<< c;
return 0;
} |
Partager