Pourquoi le C++ est toujours au top, et comment le portfolio fait la différence
\n\nVous avez sûrement entendu : « Le C++ est difficile », « Le C++ est en train de mourir » et autres histoires effrayantes. La réalité est tout autre : le C++ règne toujours en maître dans le game dev, les systèmes à haute charge, la finance et le développement embarqué. Ni Unreal Engine, ni Chromium, ni les bases de données comme MySQL ne peuvent s'en passer.
\n\nMais il y a un problème : apprendre la syntaxe n'est que la moitié du chemin. L'employeur ne veut pas voir un diplôme, mais des projets C++ pour un portfolio où l'architecture, la gestion de la mémoire et la capacité à résoudre des problèmes concrets sont visibles. C'est pourquoi nous avons rassemblé 10 idées – du simple au avancé. Chaque idée est accompagnée d'un exemple de code et d'une explication de la compétence qu'elle développe.
\n\nPrêt à constituer un portfolio qui donnera des frissons aux RH ? C'est parti.
\n\n1. Éditeur de texte en console (type nano)
\nDifficulté : Débutant
\nCompétences : Gestion des fichiers, chaînes de caractères, contrôle du terminal
Un classique qui ne se démode jamais. Vous créez un éditeur simple avec ouverture, édition et sauvegarde de fichiers. Vous apprendrez à travailler avec fstream, à gérer les pressions de touches et à contrôler le tampon.
#include <iostream>\n#include <fstream>\n#include <string>\n#include <vector>\n\nclass TextEditor {\nprivate:\n std::vector<std::string> lines;\n std::string filename;\npublic:\n void open(const std::string& file) {\n filename = file;\n std::ifstream in(file);\n std::string line;\n while (std::getline(in, line)) {\n lines.push_back(line);\n }\n }\n void save() {\n std::ofstream out(filename);\n for (const auto& line : lines) {\n out << line << '\\n';\n }\n }\n void run() {\n // Ici, la boucle de traitement des entrées\n }\n};\n\n2. Serveur HTTP simple (monothread)
\nDifficulté : Intermédiaire
\nCompétences : Sockets, protocoles réseau, traitement des requêtes
Écrivez un serveur qui accepte les requêtes HTTP GET et sert des fichiers statiques. C'est l'étalon-or pour comprendre comment fonctionne Internet. Utilisez sys/socket.h sous Linux ou winsock2.h sous Windows.
#include <iostream>\n#include <cstring>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <unistd.h>\n\nint main() {\n int server_fd = socket(AF_INET, SOCK_STREAM, 0);\n sockaddr_in address;\n address.sin_family = AF_INET;\n address.sin_addr.s_addr = INADDR_ANY;\n address.sin_port = htons(8080);\n\n bind(server_fd, (struct sockaddr*)&address, sizeof(address));\n listen(server_fd, 3);\n\n std::cout << "Serveur démarré sur le port 8080\\n";\n // Boucle accept et lecture des requêtes\n return 0;\n}\n\nUn tel projet dans un portfolio C++ montre immédiatement que vous comprenez le modèle OSI et que vous savez travailler avec des interfaces réseau de bas niveau.
\n\n3. Gestionnaire de tâches (To-Do List) avec interface graphique
\nDifficulté : Intermédiaire
\nCompétences : Qt ou SFML, modèle MVC, travail avec une base de données (SQLite)
Créez une application avec ajout, suppression et tri des tâches. Utilisez la bibliothèque Qt – cela vous donnera une compréhension des signaux et des slots, ainsi que des compétences en travail avec une interface graphique. Ajoutez un stockage dans SQLite via sqlite3.h.
#include <QApplication>\n#include <QMainWindow>\n#include <QListWidget>\n#include <QPushButton>\n\nint main(int argc, char *argv[]) {\n QApplication app(argc, argv);\n QMainWindow window;\n window.setWindowTitle("Gestionnaire de tâches");\n \n QListWidget* list = new QListWidget(&window);\n QPushButton* addBtn = new QPushButton("Ajouter une tâche", &window);\n \n // layout et connexion des signaux\n window.show();\n return app.exec();\n}<