Aller au menu - Aller au contenu

Icône Ce que vous pouvez encore apprendre

Mise à jour : 27/05/2011
Difficulté : Facile Facile Durée d'étude : 1 jour Creative Commons BY-NC-SA
75 639 visites depuis 7 jours, dont 544 sur ce chapitre classé 5/786
Qu'on se le dise : bien que le tutoriel C++ s'arrête là, vous ne savez pas tout sur tout. D'ailleurs, personne ne peut vraiment prétendre tout savoir sur le C++ et toutes ses bibliothèques.

L'objectif n'est pas de tout savoir, mais d'être capable d'apprendre ce dont vous avez besoin lorsque c'est nécessaire.

Si je devais moi-même vous apprendre tout sur le C++, j'y passerais toute une vie (et encore, ça serait toujours incomplet). J'ai autre chose à faire, et j'en serais de toute façon incapable.
Du coup, plutôt que de tout vous apprendre, j'ai choisi de vous enseigner de bonnes bases tout au long du cours. Cette annexe a pour but, maintenant que le cours est fini, de vous donner un certain nombre de pistes pour continuer votre apprentissage. :)

J'ai découpé ce chapitre en 3 parties :
  • Ce que vous pouvez encore apprendre sur le langage C++ lui-même.
  • Ce que vous pouvez encore apprendre sur la bibliothèque Qt.
  • Présentation de quelques autres bibliothèques. Il n'y a pas que Qt !

Cette annexe est seulement là pour vous présenter de nouvelles notions, pas pour vous les expliquer. Ne soyez donc pas surpris si je suis beaucoup plus succinct que d'habitude. Imaginez cette annexe comme un sommaire de ce qu'il vous reste à apprendre. ;)
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

... sur le langage C++

Le langage C++ est suffisamment riche pour qu'il vous reste encore de nombreuses notions à découvrir. Certaines d'entre elles sont particulièrement complexes, je ne vous le cache pas, et vous n'en aurez pas besoin tout le temps.


Toutefois, au cas où vous en ayez besoin un jour, je vais vous présenter rapidement ces notions. A vous ensuite d'approfondir vos connaissances, par exemple en lisant des tutoriels écrits par d'autres Zéros sur le C++, en lisant des livres dédiés au C++, ou tout simplement en faisant une recherche Google. ;)


Voici les notions que je vais vous présenter ici :

  • L'héritage multiple
  • Les espaces de nom
  • Les types énumérés
  • Les typedef


L'héritage multiple



L'héritage multiple consiste à hériter de plusieurs classes à la fois. Nous avons déjà fait cela dans la partie sur Qt, pour pouvoir utiliser une interface dessinée dans Qt Designer :

Héritage multiple


Pour hériter de plusieurs classes, il suffit de mettre une virgule entre les noms de classe, comme on l'avait fait :

Code : C++
1
2
3
4
class FenCalculatrice : public QWidget, private Ui::FenCalculatrice
{

};


C'est une notion qui paraît simple mais qui, en réalité, est très complexe.

En fait, la plupart des langages de programmation plus récents, comme Java et Ruby, ont carrément décidé de ne pas gérer l'héritage multiple. Pourquoi ? Parce que ça peut être utile dans certaines conditions assez rares, mais si on l'utilise mal (quand on débute) ça peut devenir un cauchemar à gérer.

Bref, jetez un coup d'oeil à cette notion, mais juste un coup d'oeil de préférence, car vous ne devriez pas y avoir recours souvent. ;)

Les namespaces



Souvenez-vous. Dès le début du tutoriel C++, je vous ai fait utiliser les objets cout et cin qui permettent d'afficher un message dans la console et de récupérer le texte saisi au clavier.

Voici le tout premier code source C++ que vous aviez découvert mais avec le vrai nom des objets :

Code : C++
1
2
3
4
5
6
7
#include <iostream>

int main()
{
        std::cout << "Hello world!" << std::endl;
        return 0;
}


Le préfixe "std::" correspond à ce qu'on appelle un namespace, c'est-à-dire espace de nom en français. Les namespaces sont utiles dans de très gros programmes où il y a beaucoup de noms de classes et de variables différents.

Quand vous avez beaucoup de noms différents dans un programme, il y a un risque que 2 classes aient le même nom. Par exemple, vous pourriez utiliser 2 classes Couleur dans votre programme : une dans votre bibliothèque "Jeu3D" et une autre dans votre bibliothèque "Fenetre".
Normalement, avoir 2 classes du même nom est interdit... sauf si ces classes sont chacune dans un namespace différent ! Imaginez que les namespaces sont comme des "boîtes" qui évitent de mélanger les noms de classes et de variables.

Namespaces


Si la classe est dans un namespace, on doit placer le nom du namespace en préfixe devant :

Code : C++
1
2
Jeu3D::Couleur rouge; // Utilisation de la classe Couleur située dans le namespace Jeu3D
Fenetre::Couleur vert; // Utilisation d'une AUTRE classe appelée elle aussi Couleur, dans le namespace Fenetre


Les espaces de nom sont vraiment comme des noms de famille pour les noms de variables.

Le namespace "std" est utilisé par toute la bibliothèque standard du C++. Il faut donc mettre ce préfixe devant chaque nom issu de la bibliothèque standard (cout, cin, vector, string. ..).
Il est aussi possible, comme on le fait depuis le début, d'utiliser la directive using namespace au début du fichier :

Code : C++
1
using namespace std;


Grâce à ça, dans tout le fichier le compilateur saura que vous faites références à des noms définis dans l'espace de nom std. Cela vous évite d'avoir à répéter std:: partout.

Certains programmeurs préfèrent éviter d'utiliser "using namespace" car, en lisant le code ensuite, on ne sait plus vraiment à quel namespace le nom se rapporte.



Les types énumérés



Dans nos programmes, on a parfois besoin de manipuler des variables qui ne peuvent prendre qu'un petit nombre de valeurs différentes. :euh: Tenez, si vous devez décrire les trois niveaux de difficulté de votre jeu, vous pourriez utiliser un int valant 1, 2 ou 3. Mais ce n'est pas très sécurisé, on n'est pas sûr que notre entier prendra toujours une de ces trois valeurs. Il serait bien d'avoir un type qui ne peut prendre que ces trois valeurs.

Un type énuméré se déclare comme ceci :

Code : C++
1
enum Niveau{Facile, Moyen, Difficile};


On l'utilise alors comme n'importe quelle autre variable.

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int main()
{
    Niveau level

    //...

    if(level == Moyen)
        cout << "Vous avez choisi le niveau moyen" << endl;
    //...
    
    return 0;
}


C'est bien pratique. Et en plus, cela rend le code plus lisible. La ligne if(level == Moyen) est plus clair à lire que if(level == 2). On n'a pas besoin de réfléchir à ce que représente ce 2.

On retrouve souvent les types énumérés dans des codes utilisant les tests switch. Voici un exemple utilisant un type énuméré pour les directions d'un personnage sur une carte :

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
enum Direction{Nord, Sud, Est, Ouest};

int main()
{
    Direction dir;
    Personnage p;

    //...

    switch(dir)
    {
        case Nord: p.avancerNord(); break;
        case Sud: p.avancerSud(); break;
        case Est: p.avancerEst(); break;
        case Ouest: p.avancerOuest(); break;
    }

    //...

    return 0;
}


Certains programmeurs utilisent des enum partout alors que d'autres n'aiment pas. Faites comme vous préférez. :)

Les typedefs



Vous en voulez encore ? Voyons donc une petite astuce bien pratique pour économiser du texte.
Certains types sont vraiment long à écrire. Prenez par exemple un itérateur sur une table associative de chaînes de caractères et de vector d'entiers. Un objet de ce type se déclare comme ceci:
Code : C++
1
std::map<std::string, std::vector<int> >::iterator it;

C'est un peu long ! :(

Les typedefs (redéfinition de type en français) permettent de créer des alias sur des noms de type pour éviter de devoir taper ce long nom de type à chaque fois. Par exemple si l'on souhaite renommer le type précédent en Iterateur, on écrit :

Code : C++
1
typedef std::map<std::string, std::vector<int> >::iterator Iterateur


A partir de là, on peut déclarer des objets de ce type en utilisant l'alias :

Code : C++
1
Iterateur it;


Évidemment, si on utilise qu'une seule fois un objet de ce type, on ne gagne rien, mais dans de longs codes, cela peut devenir pratique.
Vous n'êtes pas convaincu ? Vous trouvez ça inutile ? J'ai un argument en béton pour vous convaincre ! On vous avait révélé la vérité sur les string dans le chapitre d'introduction à la POO. Mais on ne vous avait pas tout dit !
string est en réalité un alias d'un type template plutôt compliqué. Le fichier d'en-tête string de la SL ne contient en réalité pas beaucoup plus que ça :

Code : C++
1
typedef basic_string<char, char_traits<char>, allocator<char> > string;


o_O o_O
C'est quand même bien plus simple d'écrire string que tout ce long type à chaque fois, non ?

... sur la bibliothèque Qt

Dans le cours, nous avons eu largement le temps d'étudier la bibliothèque Qt et de découvrir à quel point il était simple de créer des GUI (fenêtres).

Nous avons aussi découvert que cette bibliothèque était énorme, et qu'on devait plutôt parler de framework (ensemble de bibliothèques).
Je vous rappelle que Qt est constitué de plusieurs modules :

  • GUI
  • OpenGL
  • Dessin
  • Réseau
  • SVG
  • Scripts
  • XML
  • SQL
  • Core

En ce qui nous concerne, nous avons eu l'occasion de bien faire le tour du module GUI (c'était le but !) et nous nous sommes initiés aussi un peu au réseau.

Malgré cela, nous n'avons pas tout tout vu sur le module GUI. D'autre part, nous avons seulement effleuré le module réseau, et nous n'avons pas du tout parlé des autres modules.
Je vais, dans cette annexe, vous présenter brièvement quelques-uns de ces modules. Je ne vais pas vous les expliquer (ce serait beaucoup trop long !), juste vous en parler pour vous donner quelques pistes.

Surtout, pensez à vous rendre sur la doc pour en savoir plus ! ;)


Module GUI : des petites fonctionnalités cachées



Il y a quelques widgets et fonctionnalités plus rares dont je n'ai pas eu l'occasion de parler. Je vais vous en présenter quelques-uns rapidement ici. Ils ne sont pas toujours utiles mais ça peut être bien de savoir qu'ils existent.

Cette liste des autres fonctionnalités à découvrir n'est pas complète, loin de là. Je ne connais pas tout. Je vous donne juste une idée des "petites choses" que vous pouvez découvrir si vous passez un peu de temps dans la doc. ;)


QCalendarWidget : un calendrier tout prêt



Le widget QCalendarWidget permet d'afficher un calendrier :

QCalendarWidget


Si vous devez réaliser un agenda ou si l'utilisateur doit sélectionner une date, nul doute que ce widget vous fera gagner un temps fou !


QSplashScreen : pour faire patienter au démarrage



Parfois, certains programmes sont un peu longs à charger. Pour faire patienter l'utilisateur, on affiche un "splash screen", c'est-à-dire une petite image au centre de l'écran. C'est ce que fait Code::Blocks au démarrage par exemple.

Le splash screen de Code Blocks


Qt permet de créer un "splash screen" avec la classe QSplashScreen. On l'utilise en général dans le main, juste avant d'ouvrir la fenêtre principale :

Code : C++
 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
#include <QApplication>
#include <QTranslator>
#include <QLocale>
#include <QLibraryInfo>
#include <QSplashScreen>
#include <QPixmap>
#include "FenPrincipale.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QSplashScreen splash(QPixmap("znavigo.png"), Qt::WindowStaysOnTopHint);
    splash.show();

    // Traduction des chaînes prédéfinies par Qt dans notre langue
    QString locale = QLocale::system().name();
    QTranslator translator;
    translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    app.installTranslator(&translator);

    // Ouverture de la fenêtre principale du navigateur
    FenPrincipale principale;
    principale.show();

    return app.exec();
}


Le splash screen peut être arrêté en cliquant dessus.
Après, libre à vous de l'arrêter automatiquement au bout d'un certain temps, il faut juste chercher dans la doc comment faire.


Afficher une icône dans le system tray



Pour certaines applications résidentes en mémoire, il peut être utile de placer une icône dans le system tray, oui là à côté de l'horloge vous savez. ;)

Qt permet justement de le faire avec QSystemTrayIcon :


System tray


Le mieux pour apprendre à s'en servir est de jeter un oeil à l'exemple fourni dans la doc de Qt.


Module réseau : utilisez des classes de haut niveau



Dans notre découverte du réseau, nous avons utilisé des QTcpSocket et un QTcpServer. C'est une gestion assez bas niveau des paquets et il nous a fallu apprendre un peu comment le réseau fonctionnait.
On aurait pu parler des paquets UDP aussi, mais on les utilise vraiment dans des cas spécifiques.

En revanche, ce qu'on n'a pas vu, c'est qu'il y a des classes de plus haut niveau qui vous évitent d'avoir à manipuler les paquets TCP directement. Je pense en particulier à :

  • QHttp : vous permet d'utiliser le protocole HTTP et donc de télécharger des pages web ou des fichiers via le web.
  • QFtp : vous permet de télécharger et d'envoyer des fichiers par FTP. Vous pourriez créer votre propre client FTP comme Filezilla par exemple. ;)


Ces classes sont beaucoup plus faciles à utiliser que celles que nous avons vues, donc n'hésitez pas à y jeter un oeil.
Elles sont brièvement introduites dans la page d'accueil du module réseau sur la doc de Qt.


Module SQL : accès aux bases de données



Si votre programme doit enregistrer de nombreuses données, il peut être utile de les stocker dans une base de données. C'est un système puissant pour enregistrer des informations, mais il faut connaître le langage SQL pour écrire et lire des informations dedans.

Qt propose tout ce qu'il faut pour se connecter à une base de données dans votre programme, mais il n'inclue pas la base de données... ce sera à vous de l'installer. En clair, si vous utilisez MySQL comme base de données, il faudra d'abord aller installer MySQL sur le site officiel avant de pouvoir établir une connexion avec dans votre programme.

MySQL est un système de gestion de base de données puissant mais évitez d'y avoir recours systématiquement dans vos programmes. Ce serait un peu utiliser un tank équipé de missiles nucléaires pour tuer une mouche.
Parfois, stocker les meilleurs scores dans un jeu pourrait être facilement fait dans des fichiers (avec QFile par exemple) sous forme de texte simple ou au format XML (je vais en parler un peu plus loin). Inutile de sortir l'artillerie lourde MySQL pour ça.

Si toutefois vous avez vraiment besoin d'une base de données mais que vous ne voulez pas utiliser MySQL qui est un peu gros, jetez un oeil du côté de SQLite qui est tout léger (mais un peu moins complet).


Une fois que vous avez installé votre système de gestion de base de données sur votre ordinateur, vous pouvez découvrir comment y faire appel depuis Qt. Le mieux est de lire l'introduction au module QtSql sur la doc. En tout cas c'est ce que je ferais à votre place.

En quelques minutes de lecture de cette seule page, vous devriez déjà savoir vous connecter à la base de données et exécuter des requêtes SQL (mais attention, il faut connaître le langage SQL avant !).


Module XML : pour ceux qui doivent gérer des données au format XML



Le XML est un langage générique qui est à la base de nombreux autres langages, comme XHTML (qui permet de créer des pages web).

Le principe de XML peut être très vite compris si vous avez déjà fait du XHTML avant. En gros, c'est vous qui définissez vos propres balises :

Code : XML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<bibliotheque>
	<livre>
		<auteur>J.R.R. Tolkien</auteur>
		<titre>Le seigneur des anneaux</titre>
	</livre>
	<livre>
		<auteur>R. Barjavel</auteur>
		<titre>La nuit des temps</titre>
	</livre>
</bibliotheque>


Les données sont placées entre des balises que vous définissez. L'avantage du XML est qu'il est facile à lire (enfin, tant que le fichier n'est pas trop gros ou trop complexe).

Vous pouvez vous servir de cette technique pour organiser vos données dans des fichiers sans avoir recours à une base de données. D'autre part, le XML est un format d'échange devenu courant de nos jours, et il est possible que quelqu'un vous "envoie" des données au format XML que vous devrez traiter dans votre programme.

Pour lire le contenu d'un document XML comme celui ci-dessus (et pour écrire du XML aussi), il y a le module QtXml qui permet de faire cela facilement. Il vous faudra acquérir avant un peu de théorie sur le fonctionnement de XML (DOM, SAX, XQuery, DTD, XML Schema...). Il vaut mieux être rôdé sur la théorie de XML avant de s'y lancer sinon vous n'en profiterez pas. ;)

Je vous conseille de lire cette petite introduction à XML sur le Site du Zéro avant de faire des recherches plus approfondies.
Wikipédia est une bonne source de départ aussi.


Une fois que vous connaissez un peu mieux le fonctionnement de XML, direction la page d'accueil du module QtXml pour découvrir les outils que Qt met à votre disposition pour lire et écrire du XML. Il y a de quoi faire, et encore une fois je vous le rappelle, mieux vaut être armé et connaître XML avant de se lancer là-dedans !


Module Core : toutes les fonctionnalités de base de Qt



Le module QtCore contient des classes de base de Qt qui n'ont pas de rapport avec les GUI et qui peuvent donc être utilisées dans un programme purement console.

Dans ce module, on trouve un certain nombre de classes que vous connaissez déjà :

  • QString : gestion des chaînes de caractères.
  • QByteArray : une suite d'octets (on s'en est servi dans le programme de Chat pour construire des paquets).
  • QFile : accès aux fichiers.
  • QLocale : permet d'accéder aux habitudes de représentation des nombres et chaînes dans différentes langues.
  • QList : une liste capable de stocker un tableau à taille dynamique (cette classe est une version "Qt" de ce qui se fait dans la STL dont je vous ai parlé plus haut).
  • QUrl : représente une URL.


Voilà quelques exemples de classes du module QtCore que vous avez déjà utilisées. Comme vous le voyez, ces classes font partie du "coeur" de Qt et pas du module GUI car elles peuvent être réutilisées dans tous les autres modules.

Jetez donc un oeil à la liste des classes du module QtCore. Il y a de quoi faire, et on retrouve notamment de nombreuses versions "Qt" de classes présentes dans la STL (il y a même un QVector !).

Bonne pêche !

D'autres bibliothèques

Vous en avez fait l'expérience dans ce cours avec Qt, on utilise souvent des bibliothèques externes en C++. Le problème c'est qu'il y en a des milliers et que l'on ne sait pas forcément laquelle choisir. Tenez, rien que pour créer des fenêtres, je pourrais vous citer une dizaine de bibliothèques performantes. Heureusement, je suis là pour vous aider un peu dans cette jungle.

Créer des jeux en 2D



Si vous avez lu le cours de C, vous avez certainement appris à utiliser la bibliothèque SDL pour créer des jeux en 2D, comme par exemple le "Mario Sokoban" :

Image utilisateur


On peut tout à fait utiliser la SDL en C++, mais il existe d'autres bibliothèques utilisant la force de la programmation orientée objet qui sont plus adaptée à notre langage favori.

Allegro



Image utilisateur
Allegro est une bibliothèque multi-plateforme dédiée aux jeux vidéos. Ses créateurs ont particulièrement optimisé leurs fonctions de sorte à ce que les jeux réalisés soient aussi rapides que possible. Elle gère tout ce qui est nécessaire à la création d'un jeu, les joysticks, le son, les images, les boutons et autres cases à cocher. Son principal défaut, pour nous francophones, est que sa documentation est anglais.


La SFML



Logo de la SFML
La SFML se décrit elle-même comme étant une alternative orientée objet à la SDL.
Cette bibliothèque est très simple d'utilisation et propose également tous les outils nécessaires à la création de jeux sous forme de classes. Un autre avantage est qu'elle est découpée en petits modules indépendants, ce qui permet de n'utiliser que la partie dédiée au son ou que la partie dédiée à la communication sur le réseau par exemple.
Finalement, tout est documenté en français et son créateur, Laurent Gomila, passe souvent sur les forums du SdZ pour aider les débutants. C'est donc un bon choix pour débuter dans le domaine passionnant des jeux vidéos.

Faire de la 3D



Encore un domaine très vaste et très intéressant. De nos jours la plupart des jeux vidéos sont réalisés en 3D et beaucoup de monde se lance dans la programmation C++ justement dans le but de réaliser des jeux en trois dimensions. De base, il existe deux APIs pour manipuler les cartes graphiques : DirectX et OpenGL, la première n'étant disponible de base que sous Windows. Vous avez certainement déjà dû entendre ces deux noms. ;)
Avec ça, on peut tout faire, tout dessiner, tout réaliser. Le problème, c'est que ces deux APIs ne proposent que des fonctionnalités de base comme dessiner un triangle ou un point. Réaliser une scène complète avec un personnage qui bouge et des animations demande donc beaucoup de travail. C'est pour cela qu'il existe ce qu'on appelle des "moteurs 3D" qui proposent des fonctionnalités plus haut-niveau et donc plus simples à utiliser. Tous les jeux vidéos que vous connaissez utilisent des moteurs 3D, c'est la vraie boîte à outils qu'utilisent les programmeurs.

Parmi tous les moteurs existants, je vous en cite deux bien connus et simples d'utilisation : Irrlicht et Ogre3D.
Ces deux bibliothèques proposent globalement le même lot de classes et fonctions. Comme bien souvent, les documentations de ces moteurs sont en anglais, mais vous avez de la chance, il existe sur le SdZ deux cours d'introduction à ses outils. Vous les trouverez ici.

Un screenshot d'un jeu réalisé avec Irrlicht Un screenshot d'un jeu réalisé avec Irrlicht


Pour choisir entre ces deux bibliothèques (ou parmi d'autres encore), je vous conseille de regarder quelques codes sources d'exemple et le début des cours d'introduction. Vous serez alors plus à même de décider lequel vous plaît le plus.

Plus de GUI



Vous avez appris à utiliser Qt dans ce cours, mais il n'y a bien sûr pas que ce framework pour réaliser des applications avec des fenêtres. En fait, le choix est gigantesque ! Je vais ici vous présenter brièvement deux bibliothèques que l'on voit dans de nombreux projets.

wxWidgets



Logo de wxWidget
wxWidgets ressemble beaucoup à Qt dans sa manière de créer les fenêtres et les widgets qui s'y trouvent. On y retrouve aussi la notion de signaux, de slots et de connexions entre eux. Vous devriez donc facilement vous y retrouver. L'éditeur Code::Blocks que nous utilisons depuis le début du cours est, par exemple, basé sur wxWidgets. On peut donc réaliser de belles choses. ;)

Logo de Microsoft .NET
.NET (prononcez "dot net") est le framework de création de fenêtre développé par Microsoft. En plus des fonctionnalités liées aux GUIs, .NET permet d'interagir complètement avec Windows et permet d'accéder à de nombreux services comme la communication sur le réseau ou la gestion du son. Bref, c'est une bibliothèque vraiment très complète. Presque tous les logiciels que vous connaissez sous Windows l'utilisent aujourd'hui. C'est vraiment un outil incontournable. De plus, elle est très bien documentée, ce qui permet de trouver rapidement et facilement les informations nécessaires. Son seul défaut est qu'elle n'est disponible entièrement que sous Windows. Il existe des projets comme Mono qui tentent d'en proposer une version sous Mac et Linux, mais tout n'est pas encore disponible.

Manipuler du son



Alors là, c'est plus simple de faire son choix. Il y a bien sûr beaucoup de bibliothèques qui permettent de manipuler du son, mais il y en a une qui écrase tellement la concurrence que je vais m'y limiter. Il s'agit de FMOD EX. Presque tous les jeux vidéos que vous connaissez l'utilisent, c'est dire !

Un programme de visualisation du son réalisé en C grâce à FMOD


Cette bibliothèque permet de lire à peu près tous les formats de fichiers sonores, du wav au mp3, tout y est. On peut ensuite jouer ces sons, les transformer, les filtrer, les distordre, y ajouter des effets, etc.
Il n'y a presque aucune limite. Je crois que vous l'avez compris, c'est le choix à faire dans le domaine.

Boost



Logo de boost
Je ne pouvais pas terminer ce chapitre sans vous parler de boost. C'est la bibliothèque incontournable de ces dernières années. Elle propose près d'une centaine de modules dédiés à des tâches bien spécifiques. On peut vraiment la voir comme une extension de la SL. Chaque module de boost a été écrit avec grand soin souvent dans le cadre de recherche en informatique. C'est donc un vrai gage de fiabilité et d'optimisation.
Je ne peux pas vous présenter ici tout ce qu'on y trouve. Il me faudrait pour ça, un deuxième tutoriel au moins aussi long que celui-là. :( Mais je vous invite à jeter un oeil à la liste complète des fonctionnalités. En résumé, on y trouve :
  • De nombreux outils mathématiques (générateurs aléatoires, fonctions compliquées, matrices, nombres hyper-complexes, outils pour les statistiques, ...).
  • Des pointeurs intelligents. Ce sont des outils qui gèrent intelligemment la mémoire et évitent les problèmes qui surviennent quand on manipule dangereusement des pointeurs.
  • Des outils dédiés à la communication sur le réseau.
  • Des fonctions pour la mesure du temps et de la date.
  • Des outils pour naviguer dans l'arborescence des fichiers.
  • Des outils pour la manipulation d'images de tout format.
  • Des outils pour utiliser plusieurs coeurs d'un processeur dans un programme.
  • Des outils pour exécuter un code source python en C++.
  • ...


Vous voyez, il y a vraiment de tout. La plupart des fonctionnalités sont proposées sous forme de templates et donc entièrement optimisées pour votre utilisation lors de la compilation. C'est vraiment du grand art ! Je ne peux que vous recommander d'user et même d'abuser de boost. :soleil:


Comme je vous l'ai dit, cette liste n'est bien sûr pas complète. L'important est de choisir un outil avec lequel vous vous sentez à l'aise. N'hésitez pas à surfer sur le web pour trouver d'autres options ou d'autres utilisateurs qui présentent leurs préférences. Vous pouvez aussi poser des questions sur le forum C++ du SdZ. La communauté se fera un plaisir de vous répondre et de vous guider dans vos choix.
J'espère que cette annexe aura rempli son rôle : vous aider à regarder dans de nouvelles directions. L'inconnu, ça fait un peu peur au début, mais on s'y fait très vite vous verrez. ;)

Comme vous avez pu le voir, tout ce que vous pouvez faire en C++ (et en programmation en général) est tellement riche qu'on n'aurait jamais assez d'une vie pour tout connaître. J'espère que vous me comprenez maintenant. :p

Plutôt que de tout apprendre, essayez plutôt de découvrir une nouvelle notion à la fois. Si vous vous éparpillez trop, vous aurez du mal à bien assimiler ces connaissances.

Bon courage, et bonne continuation ! :)
Chapitre précédent Sommaire

Partager

28 commentaires pour "Ce que vous pouvez encore apprendre"
Note moyenne : 3.85 / 4 (1749 votes)
Pseudo Commentaire
Hors ligne RizzenVirnn # Posté le 25/04/2011 à 10:15:34
Avatar

Citation : M@ateo
A cette liste, il faudrait rajouter la portée "friend". Je n'en ai pas parlé dans le cours car c'est une notion à double tranchant : elle peut être très pratique dans certains cas, mais si vous l'utilisez mal vous risquez de ne plus respecter le principe d'encapsulation (et donc coder comme des malpropres >_< ).


Ah marrant pourtant j'ai l'impression qu'il y a une partie qui parle de ça ;)

Ubuntu 32bit, Archlinux 64bit
HP Pavilion dv6790eb
 
Hors ligne germino # Posté le 05/06/2011 à 10:04:02
public programmer<C++>
Avatar

Avis : Très bon
Flux RSS

Ville : St germain laprade
Pays : France métropolitaine

Dites donc, j'ai l'impression que cette conclusion est très bien foutue, on n'a rien à y ajouter !

Citation : Qui-Gon-Jin
Ce n'est pas parce que tu parles que tu es intelligent.
 
Hors ligne germino # Posté le 05/06/2011 à 10:26:46
public programmer<C++>
Avatar

Avis : Très bon
Flux RSS

Ville : St germain laprade
Pays : France métropolitaine

Citation : wazza6
Dans les annexes , je crois qu'il y a une erreur:
C'est écrit
Citation : M@teo21

Code : C++
1
2
int tableauEntiers[10];
string tableauChaines[5];

Le problème, c'est que ce genre de tableau a une taille fixe. Le premier ne peut stocker que 10 entiers, et le second que 5 chaînes (string) maximum.

Parfois, on ne sait pas combien de données différentes notre tableau va contenir. Ca peut très bien être 3 comme 300... Imaginez par exemple un jeu en ligne : on ne sait pas combien de joueurs vont participer à l'avance quand on écrit le code. Rappelez-vous de notre programme de Chat : on ne sait pas combien de gens vont chatter.


Mais les tableaux ont une case 0 , pas vrai? Donc il peut y avoir 11 entiers et 6 chaînes!

J'ai pas raison? :D
Eh! Il est ou mon trophé??

Désolé, mais non. Je rectifie pour ceux qui lisent ce post :
Code : C++
1
2
int i = tableauEntiers[10];
string s = tableauChaines[5];

te donnent 2 belles segment fault :-°

Citation : Qui-Gon-Jin
Ce n'est pas parce que tu parles que tu es intelligent.
 
Hors ligne Polevaultsv # Posté le 15/03/2012 à 18:53:41

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int main()
{
    Niveau level

    //...

    if(level == Moyen)
        cout << "Vous avez choisi le niveau moyen" << endl;
    //...
    
    return 0;
}


Et il est où le point virgule à la fin de Niveau ? :o
Hors ligne Corpia # Posté le 05/04/2012 à 19:18:59

Un grand merci à l'auteur de ce tuto pour tout ce travail, et celui que du coup il nous facilite. J'ai enfin compris une paire de trucs qui étaient pour moi restés nébuleux.
Toute ma gratitude donc à M@teo pour ce cours clair et si vivant :)

Voir tous les commentaires