From 1c7f45d4ba46c1e3aa127b37c5ea1b72dbf21f77 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Wed, 3 Aug 2022 11:14:34 +0200 Subject: [PATCH] correc cpp04 --- Intra Projects CPP Module 04 Edit.html | 752 +++++++++++++++++++++++++ 1 file changed, 752 insertions(+) create mode 100644 Intra Projects CPP Module 04 Edit.html diff --git a/Intra Projects CPP Module 04 Edit.html b/Intra Projects CPP Module 04 Edit.html new file mode 100644 index 0000000..13cb915 --- /dev/null +++ b/Intra Projects CPP Module 04 Edit.html @@ -0,0 +1,752 @@ + + + + + + + + + + + + + + + +Intra Projects CPP Module 04 Edit + + + + + + + + +
+ +
+ + + + + + +
+ + +
+
+
+ +
+
+
+ +
+
+
+

Tests préliminaires

+

Si un cas de triche est suspecté, la notation et l'évaluation prennent fin immédiatement. Pour le signaler, sélectionnez le flag "Cheat". Faites attention à l'utiliser avec calme, précaution et discernement.

+
+

Prérequis

+

+Le code doit compiler avec c++ et les flags -Wall -Wextra -Werror
Pour rappel, ce projet doit suivre le standard C++98. Par conséquent,
des fonctions C++11 (ou autre standard) et les containers ne sont PAS
attendus.

Ne notez pas l'exercice si vous trouvez :
- Une fonction implémentée dans un fichier d'en-tête (sauf pour
les fonctions templates).
- Un Makefile compilant sans les flags demandés et/ou avec autre
chose que c++.

Sélectionnez le flag "Fonction interdite" (Forbidden function) si
vous rencontrez :
- L'utilisation d'une fonction "C" (*alloc, *printf, free).
- L'utilisation d'une fonction interdite dans le projet.
- L'utilisation de "using namespace " ou du mot-clé "friend".
- L'utilisation d'une bibliothèque externe, ou de fonctionnalités
propres aux versions postérieures à C++98.
+

+
+ + +
+ + + + +
+
+
+
+
+
+

Exercice 00 : Polymorphisme

+

Comme d'habitude, il doit y avoir assez de tests pour prouver que le programme +fonctionne comme demandé. S'il n'y en a pas, ou que les tests ne sont pas +assez précis, ou qu'une des classes n'est pas sous la forme canonique de +Coplien, ne notez pas cet exercice. +

+
+

Premières vérifications

+

+Il y a une classe Animal qui possède un attribut :
Une string appelée type.
Vous devez pouvoir instantier cette classe et l'utiliser.
+

+
+ + +
+ + + + +
+
+

Héritage

+

+Il y a au minimum deux classes héritant d'Animal : Cat et Dog.
Les messages affichés par leur constructeur et leur destructeur doivent
être cohérents.
Demandez des explications sur l'ordre d'enchaînement du constructeur et
du destructeur.
+

+
+ + +
+ + + + +
+
+

Classe dérivée simple

+

+L'attribut type est set à la valeur appropriée à la création de chaque
animal.
Ainsi, les chats doivent avoir le type "Cat" et les chiens "Dog".
+

+
+ + +
+ + + + +
+
+

Animal

+

+La fonction makeSound() doit toujours appeler la fonction makeSound()
correspondante. makeSound() doit être virtuelle ! Vérifiez la présence
du mot-clé "virtual" dans le code :
virtual void makeSound() const;
La valeur de retour n'est pas importante, par contre, "virtual" est
obligatoire.

Il doit y avoir un exemple avec un WrongAnimal et un WrongCat n'utilisant
pas le mot-clé "virtual" (cf. sujet).
Le WrongCat doit afficher le makeSound() du WrongCat seulement quand
utilisé comme WrongCat.
+

+
+ + +
+ + + + +
+
+
+
+
+
+

Exercice 01 : Je ne veux pas brûler le monde

+

Comme d'habitude, il doit y avoir assez de tests pour prouver que le programme +fonctionne comme demandé. S'il n'y en a pas, ou que les tests ne sont pas +assez précis, ou qu'une des classes n'est pas sous la forme canonique de +Coplien, ne notez pas cet exercice. +

+
+

Classe concrète Animal

+

+Il y a une nouvelle classe Brain.
Les classes Cat et Dog possèdent désormais l'attribut Brain comme demandé.
L'attribut Brain ne doit pas être dans la classe Animal.
La classe Brain doit avoir ses propres messages affichés par son
constructeur et son destructeur.
+

+
+ + +
+ + + + +
+
+

Classe concrète Brain

+

+La copie d'un Cat ou d'un Dog doit toujours être profonde.
Essayez quelque chose comme :
Dog basic;
{
Dog tmp = basic
}
Si la copie est superficielle, tmp et basic auront le même Brain.
Celui-ci sera supprimé à la fin du scope avec tmp.
Le constructeur par recopie doit aussi faire une copie profonde.
C'est pourquoi une implémentation propre suivant la forme canonique
de Coplien vous épargnera des heures de souffrance.
+

+
+ + +
+ + + + +
+
+

Enchaînement des destructeurs

+

+Les destructeurs de la classe Animal et de ses classes dérivées sont
virtuels. Demandez à l'étudiant(e) ce qui se passerait sans le mot-clé
"virtual". Ensuite, vérifiez en testant sans "virtual".
+

+
+ + +
+ + + + +
+
+

Affectation et copie

+

+Le constructeur par recopie et l'opérateur d'affectation des classes Cat
et Dog marchent comme demandé.
La copie profonde crée un nouveau Brain pour le nouveau Cat ou Dog.
Assurez-vous que la forme canonique de Coplien est vraiment implémentée
(pas d'opérateur d'affectation vide, etc.). Rien ne devrait être public
sans raison valable. De plus, ce code est très simple et doit donc être
propre !
+

+
+ + +
+ + + + +
+
+
+
+
+
+

Exercice 02 : Classe abstraite

+

Comme d'habitude, il doit y avoir assez de tests pour prouver que le programme +fonctionne comme demandé. S'il n'y en a pas, ou que les tests ne sont pas +assez précis, ou qu'une des classes n'est pas sous la forme canonique de +Coplien, ne notez pas cet exercice. +

+
+

Classe abstraite

+

+Il y a une classe Animal qui se comporte exactement comme attendu.
La fonction Animal::makeSound() est une fonction virtuelle pure :
virtual void makeSound() const = 0;
Le "= 0" est obligatoire.
Par conséquent, vous ne devriez pas pouvoir instantier un Animal.
Animal test; // résultera en une erreur de compilation disant que la classe est abstraite
+

+
+ + +
+ + + + +
+
+

Concrete Animal

+

+Class Cat and Dog are still present and work exactly like in ex02.
+

+
+ + +
+ + + + +
+
+
+
+
+
+

Exercice 03 : Interface and recap

+

Comme d'habitude, il doit y avoir assez de tests pour prouver que le programme +fonctionne comme demandé. S'il n'y en a pas, ou que les tests ne sont pas +assez précis, ou qu'une des classes n'est pas sous la forme canonique de +Coplien, ne notez pas cet exercice. +

+
+

Interfaces

+

+Il y a des interfaces ICharacter et IMateriaSource qui sont exactement
comme demandé dans le sujet.
+

+
+ + +
+ + + + +
+
+

MateriaSource

+

+La classe MateriaSource est présente et implémente IMateriaSource. Les
fonctions membres marchent comme attendu.
+

+
+ + +
+ + + + +
+
+

Classe concrète Materia

+

+Il y a des classe concrètes Ice et Cure qui héritent d'AMateria. Leur
méthode clone() est correctement implémentée. Les messages affichés sont
comme demandé.
La classe AMateria est abstraite (clone() est une fonction pure).
Le destructeur est virtuel : virtual ~AMateria()
AMateria possède un attribut protégé de type string pour le type de Materia.
+

+
+ + +
+ + + + +
+
+

Personnage

+

+La classe Character est présente et implémente ICharacter. Elle possède
un inventaire pouvant contenir 4 Materias maximum.
Ses fonctions membres sont implémentées comme demandé.
La copie et l'affectation d'un Character sont implémentées comme demandé
(copie profonde).
+

+
+ + +
+ + + + +
+
+
+
+
+
+

Ratings

+

Don’t forget to check the flag corresponding to the defense

+
+ + +
+
+ + + + + + + + +
+
+ +
+
+

Conclusion

+ +
+

Leave a comment on this evaluation

+ + +
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + \ No newline at end of file