Un bref aperçu du C++
Présentation
Le C++ est un langage orienté objet créé dans les années 1980 par Bjarne Stroustrup, bâti sur le langage C et inspiré de Simula.
Il a été conçu avec l’efficacité et la performance en tête, c’est pourquoi il est toujours largement utilisé dans les applications où la vitesse et la consommation mémoire sont critiques, comme les applications de bureau, les bibliothèques système, les systèmes embarqués ou les applications serveur temps réel.
Le C++ a une syntaxe très riche et puissante, ce qui en fait un langage très difficile à maîtriser. Programmer en C++ demande une grande rigueur : comme en C, le programme a un accès direct à la mémoire et aux primitives du système d’exploitation, donc la moindre erreur mène facilement à des plantages, ou pire, à un comportement indéfini.
À cause de sa syntaxe complexe, en particulier avec les templates, écrire de grosses applications C++ maintenables est un vrai défi ; c’est pourquoi des langages plus simples comme Java ou C# sont aujourd’hui plus populaires dans le domaine des applications de bureau et serveur.
Hello, World!
Pour voir à quoi ressemble le langage, rien de mieux que le traditionnel programme « Hello World », le voici :
#include <iostream>
int main()
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
La syntaxe vous paraît trop simple ? Alors voyons un exemple plus réaliste (écrit en C++14), réparti sur 3 fichiers sources différents :
// hello.hpp
#include <ostream>
class HelloPrinter {
public:
virtual ~HelloPrinter() = default;
virtual void sayHello(const std::string& world) = 0;
};
class HelloStreamPrinter: public HelloPrinter {
public:
HelloStreamPrinter(std::ostream& writer): _writer(writer) {}
void sayHello(const std::string& world) override;
private:
std::ostream& _writer;
};
// hello.cpp
#include "hello.hpp"
using namespace std;
void HelloStreamPrinter::sayHello(const string& world)
{
_writer << "Hello, " << world << "!" << endl;
}
// main.cpp
#include <iostream>
#include <memory>
#include "hello.hpp"
using namespace std;
int main(int argc, const char **argv)
{
unique_ptr<HelloPrinter> printer(new HelloStreamPrinter(cout));
printer->sayHello("World"s);
return 0;
}
Ça, c’est du vrai C++ ! Ce code fait exactement la même chose (afficher « Hello, World! »), mais couvre de nombreuses fonctionnalités du C++ :
- Directives du préprocesseur
- Unités de compilation
- Fonctions
- Classes et objets
- Constructeurs et destructeurs
- Héritage
- Polymorphisme et méthodes virtuelles
- Gestion de la mémoire
- Pointeurs, références et pointeurs intelligents
- Templates
- STL (Standard Template Library)
- Fonctions inline
- Chaînes littérales
- Surcharge d’opérateurs
- Espaces de noms
Bien comprendre tous ces concepts demande déjà un effort d’apprentissage conséquent ! Et c’est pourtant du code C++ plutôt basique 😉
Liens utiles
Ce n’est pas vraiment destiné aux débutants, mais vous aurez sans doute besoin de consulter ces liens si vous écrivez du C++ pour de vrai :