10 مشاريع بلغة C++ للمحفظة ستثير إعجاب صاحب العمل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا لا تزال C++ في الصدارة، وكيف تحل المحفظة كل شيء

\n\n

ربما سمعت: «C++ صعبة»، «C++ تحتضر» وغيرها من قصص الرعب. لكن الواقع هو: C++ لا تزال تسيطر على تطوير الألعاب، والأنظمة عالية التحميل، والمالية، والتطوير المضمن. لا يمكن الاستغناء عنها في Unreal Engine، ولا في Chromium، ولا في قواعد البيانات من مستوى MySQL.

\n\n

لكن هناك مشكلة واحدة: تعلم بناء الجملة هو نصف الطريق. صاحب العمل يريد أن يرى ليس شهادة، بل مشاريع بلغة C++ للمحفظة، حيث تظهر الهندسة المعمارية، والتعامل مع الذاكرة، والقدرة على حل المشكلات الحقيقية. لهذا السبب جمعنا 10 أفكار - من البسيطة إلى المتقدمة. كل فكرة مصحوبة بمثال كود وشرح للمهارة التي تطورها.

\n\n

هل أنت مستعد لبناء محفظة ستقشعر لها أبدان مسؤولي الموارد البشرية؟ هيا بنا.

\n\n

1. محرر نصوص في وحدة التحكم (مشابه لـ nano)

\n

الصعوبة: مبتدئ
\nالمهارات: التعامل مع الملفات، السلاسل النصية، إدارة الطرفية

\n\n

كلاسيكي لا يمل أبدًا. ستقوم بإنشاء محرر بسيط لفتح الملفات وتحريرها وحفظها. ستتعلم العمل مع fstream، ومعالجة ضغطات المفاتيح، وإدارة المخزن المؤقت.

\n\n
#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        // هنا ستكون حلقة معالجة الإدخال\n    }\n};
\n\n

2. خادم HTTP بسيط (أحادي الخيط)

\n

الصعوبة: متوسط
\nالمهارات: المقابس (Sockets)، بروتوكولات الشبكة، معالجة الطلبات

\n\n

اكتب خادمًا يقبل طلبات HTTP GET ويعيد الملفات الثابتة. هذا هو المعيار الذهبي لفهم كيفية عمل الإنترنت. استخدم sys/socket.h على Linux أو winsock2.h على Windows.

\n\n
#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 << "تم بدء تشغيل الخادم على المنفذ 8080\\n";\n    // حلقة accept وقراءة الطلبات\n    return 0;\n}
\n\n

مثل هذا المشروع في محفظة C++ يظهر فورًا أنك تفهم نموذج OSI وتجيد العمل مع واجهات الشبكة منخفضة المستوى.

\n\n

3. مدير المهام (قائمة المهام) بواجهة رسومية

\n

الصعوبة: متوسط
\nالمهارات: Qt أو SFML، نمط MVC، العمل مع قواعد البيانات (SQLite)

\n\n

أنشئ تطبيقًا لإضافة المهام وحذفها وفرزها. استخدم مكتبة Qt - سيعطيك هذا فهمًا للإشارات والفتحات (signals and slots)، بالإضافة إلى مهارات العمل مع الواجهات الرسومية. أضف تخزينًا في SQLite عبر sqlite3.h.

\n\n
#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("مدير المهام");\n    \n    QListWidget* list = new QListWidget(&window);\n    QPushButton* addBtn = new QPushButton("إضافة مهمة", &window);\n    \n    // التخطيط وتوصيل الإشارات\n    window.show();\n    return app.exec();\n}<                

المدونات

توصيات الكتب