Skip to content

Instantly share code, notes, and snippets.

@samber
Last active December 20, 2019 16:07
Show Gist options
  • Save samber/a1992feb354249bf1179bf54e36ab786 to your computer and use it in GitHub Desktop.
Save samber/a1992feb354249bf1179bf54e36ab786 to your computer and use it in GitHub Desktop.
C++

Exercices

Hello world

1- Compiler un programme C++ avec un main.cpp

2- Créer une variable msg de type std::string ayant pour valeur “Hello world”, puis l'afficher sur stdout (façon C++).

3- Aficher la longueur de la chaine

Class, method, property, public/private, static

1- Construire une class Cat (Cat.cpp et Cat.h) qui affiche “cat constructor” dans son constructeur et “cat destructor” dans le destructeur.

Instancier un objet Cat depuis le main.

2- Ajouter une method public “jump” qui affiche “jump” et l’appeler depuis le main.

3- Ajouter un paramètre “name” dans le constructor et le stocker dans une propriété privée de la classe. Modifier la méthode “jump”, afin qu’elle affiche: “[NAME] - jump”.

4- Créer une class "Mouse" avec une method “crock”, qui affiche “i'm dead”.

Instancier un objet Mouse dans le main. Puis ajouter une method “eatAnimal” dans la class Cat, qui prend en paramètre un objet Mouse et qui crock() la souris.

5- Créer une class “AnimalerieFactory” avec une method publique “buy” qui crée et renvoie une instance de Cat. AnimalerieFactory ne sera jamais instanciée.

Pointer vs references

1- Faire quelques recherches sur Google ;)

Inheritance, virtual, override

1- Créer une class abstract "AAnimal". Les classes Mouse, Cat héritent de AAnimal.

2- Créer une class Lion qui hérite de AAnimal.

3- La class AAnimal reçoit "name" dans son constructor.

4- Depuis votre main, appelez la method jump des objet de type Lion et Cat, mais sans qu'il n'y ait de duplication de code entre ces 2 classes.

5- Dans la class AAnimal, ajouter une property isSauvage (boolean), accessible depuis les classes filles, mais pas depuis l'extérieur.

6- Ajouter des getter et setter pour les properties isSauvage et name.

Dans la method "eatAnimal" de la class Cat, afficher le nom de la victime, avant d'appeler crock().

7- Déplacer la method "eatAnimal" de Cat dans la class AAnimal. Elle prend maintenant en paramètre un AAnimal.

8- Ajouter une method "talk()" de type "virtuelle pure" dans AAnimal, et l'implémenter dans chaque class fille: "graouhhh", "meww", "crss".

9- Surcharger la method "eatAnimal" dans la class souris et afficher: "I don't eat animals".

Exceptions

1- Si une souris mange un chat ou un lion, lever une exception.

2- Afficher une erreur dans le main, lorsqu'une souris lance une exception.

Ponymorphisme

1- Dans AAnimal, ajouter 2 methods run (du même nom):

  • void run() ==> affiche "ruuuun !"
  • void run(int distance) ==> affiche "running {distance} kilometers"

Templating/generic

1- Créer une simple class "Pair", avec un constructor qui prend en paramètre 2 int.

2- Ajouter des methods "min" et "max" qui renvoient le nombre le plus petit ou le plus grand.

3- Chercher "template C++" sur Google

4- Faites évoluer cette class (constructor+min+max) vers un template pour comparer des string, int, float...

Les methods "min" et "max" peuvent comparer des strings avec la fonction strcmp (qui prend en paramètre des char *).

STL

Search "data structures C++" on Google: Vector, List, Map, Stack...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment