C++: مقدمة في C++

إذا سألت عشرة مبرمجين "ما أصعب لغة برمجة؟"، سيقول خمسة على الأقل C++. لكن إذا سألت "ما اللغة التي تتمتع بأفضل أداء وأدق تحكم ويمكنها كتابة أنظمة منخفضة المستوى؟"، سيقول العشرة جميعًا C++. في هذا الدرس لن نكتب أي كود — دعونا نتعرف أولًا على C++: من هي، من أين جاءت، ماذا يمكنها أن تفعل، وهل تستحق التعلم.


1. ما هي C++؟

C++ هي لغة برمجة مُترجمة، ذات كتابة ساكنة، متعددة الأنماط. بعبارة بسيطة:

(1) علاقتها مع C

C++ هي "الترقية الفائقة" لـ C — في عام 1983، أضاف المبرمج الدنماركي Bjarne Stroustrup الأصناف إلى لغة C، مما مكّن C من القيام بالبرمجة الكائنية أيضًا.

💡 قاعدة سهلة للتذكر: أي شيء تستطيع C فعله، تستطيع C++ فعله أيضًا؛ أشياء لا تستطيع C فعلها (البرمجة الكائنية/الأنماط العامة/القوالب)، تستطيع C++ فعلها.



2. لماذا تتعلم C++؟

السبب الشرح
سقف الأداء C++ تُترجَم إلى كود آلي يعمل مباشرة على العتاد — لا آلة افتراضية، لا مترجم، لا جامع قمامة — فائق السرعة
تحكم فائق كيف تُخصَّص الذاكرة، كيف تُستخدم ذواكر CPU المؤقتة، كيف تقفز المؤشرات — أنت المسؤول
فرص وظيفية واسعة محركات الألعاب، التداول عالي التردد، الأنظمة المدمجة، القيادة الذاتية، أنظمة التشغيل — كلها مجال C++
أساس متين بعد تعلم C++، يصبح "المنطق الداخلي" للغات الأخرى (Java/Python/Go) شفافًا
قيمة طويلة الأمد C++ موجودة منذ أكثر من 40 عامًا وما زالت تتطور (C++23 صدرت للتو) — لن تصبح قديمة

▶ مثال 1: Hello World (صعوبة ⭐)

TEXT 📖 للعرض فقط
#include <iostream>

int main() {
 std::cout << "Hello, C++ World!" << std::endl;
 return 0;
}

الخرج:

TEXT 📖 للعرض فقط
Hello, C++ World!

نتيجة التشغيل:

TEXT 📖 للعرض فقط
Hello, C++ World!
💡 نصيحة: هذا هو برنامج "Hello World" في C++ — الدرس التقليدي الأول في أي لغة برمجة. دعونا نحلله:

  • #include <iostream> — تضمين مكتبة الإدخال/الإخراج (مثل import في Python)
  • int main() — نقطة دخول البرنامج (مثل if __name__ == "__main__": في Python)
  • std::cout << "..." — الإخراج على الشاشة (مثل print() في Python)
  • return 0; — إخبار نظام التشغيل "انتهى البرنامج بشكل طبيعي" (0 تعني نجاح)

▶ مثال 2: ما مدى سرعة C++؟ (صعوبة ⭐⭐)

CPP
#include <iostream>
#include <chrono>

int main() {
 // Use chrono for high-precision timing
 auto start = std::chrono::high_resolution_clock::now();
 
 // Run 1 billion empty iterations
 long count = 0;
 for (long i = 0; i < 1'000'000'000; i++) {
 count++;
 }
 
 auto end = std::chrono::high_resolution_clock::now();
 auto duration = std::chrono::duration<double>(end - start).count();
 
 std::cout << "1 billion loops time: " << duration << " seconds" << std::endl;
 return 0;
}
▶ جرّب الكود

الخرج:

TEXT 📖 للعرض فقط
1 billion loops time: 0.5 seconds
💡 نصيحة: مكتبة chrono المستخدمة هنا أُدخلت في C++11 وتوفر دقة على مستوى النانوثانية. لا تحتاج لفهمها بعد — فقط تعوّد على أسلوب C++: #include لاستيراد المكتبات، int main() كنقطة دخول، std::cout للإخراج، وusing namespace std; لتجنب كتابة std:: في كل مرة.



3. C++ مقابل C مقابل Python

البُعد C C++ Python
النوع مُترجمة مُترجمة مُفسَّرة
النمط إجرائية متعددة الأنماط (إجرائية+كائنية+عامة) متعددة الأنماط (كائنية+وظيفية)
إدارة الذاكرة يدوية (malloc/free) يدوية+مؤشرات ذكية (new/delete/unique_ptr) تلقائية (جمع القمامة)
الأداء ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐
صعوبة التعلم ⭐⭐⭐ ⭐⭐⭐⭐⭐
التطبيقات النموذجية أنوية أنظمة التشغيل، التعريفات محركات الألعاب، التداول عالي التردد، محركات المتصفحات تحليل البيانات، الذكاء الاصطناعي، خلفيات الويب
حجم الكود كبير كبير صغير
وداءة الأخطاء ضعيفة (خطأ تقسيم؟ خمّن بنفسك) متوسطة (أخطاء الترجمة صارمة) جيدة (رسائل خطأ واضحة)

(1) تشبيه من الحياة الواقعية

⚠️ ملاحظة: ليس الأمر أن "Python سيئة" — أدوات مختلفة لسيناريوهات مختلفة. لسكريبتات تدريب الذكاء الاصطناعي، Python هي الملكة؛ لمحركات الألعاب، C++ لا تُقهر.



4. تطور معايير C++

مرت C++ بتحديثات معايير متعددة منذ نشأتها. كل تحديث يضيف مجموعة من الميزات الجديدة، مما يجعل C++ أقوى وأسهل بشكل متزايد.

العام المعيار الاسم المستعار الميزات الجديدة الرئيسية
1998 C++98 أول معيار دولي القوالب، الاستثناءات، RTTI
2003 C++03 ترقيع بسيط إصلاح أخطاء
2011 C++11 C++0x تحديث كبير: auto، حلقة for المدى، nullptr، Lambda، shared_ptr، thread، قوائم التهيئة
2014 C++14 تحسينات بسيطة (make_unique، Lambda عام)
2017 C++17 روابط مهيكلة، if constexpr، تعبيرات الطي، string_view، مكتبة نظام الملفات
2020 C++20 الوحدات، الكوروتينات، المفاهيم، المدى
2023 C++23 std::print، flat_map، تعزيز الوحدات

(1) أي معيار يستخدمه هذا الدرس؟

C++17 — تحقيق التوازن بين "الميزات الجديدة مفيدة" و"دعم المترجم مستقر".

💡 نصيحة: يجب أن تقبل شيئًا واحدًا حول تعلم C++ — أنها تتغير باستمرار. الـ auto الذي تتعلمه من C++11، وstd::string_view من C++17. إذا سألك مقابِل "ما الميزات الجديدة في C++11؟"، فهذا سؤال متكرر.



5. ماذا يمكن أن تفعل C++؟

يمكن تلخيص مجالات تطبيق C++ في جملة واحدة: "الأماكن التي تتطلب أداءً فائقًا، وتحتاج تحكمًا دقيقًا بالعتاد، ولا تحتمل الأخطاء."

(1) السيناريو 1: تطوير الألعاب (الأكثر شهرة)

(2) السيناريو 2: التداول عالي التردد (الأكثر ربحية)

(3) السيناريو 3: الأنظمة المدمجة وإنترنت الأشياء (الأكثر انتشارًا)

(4) السيناريو 4: محركات المتصفحات وقواعد البيانات (الأكثر أساسية)

(5) السيناريو 5: أنظمة التشغيل والتعريفات (الأدنى مستوى)



6. سيناريوهات التطبيق الشائعة


▶ مثال 3: تفاعل بسيط مع المستخدم (صعوبة ⭐)

CPP
#include <iostream>
#include <string>

int main() {
    std::string name;
    int age;

    std::cout << "Please enter your name: ";
    std::cin >> name;

    std::cout << "Please enter your age: ";
    std::cin >> age;

    std::cout << "Hello," << name << "!Next year you " << (age + 1) << " years old。" << std::endl;

    return 0;
}
▶ جرّب الكود

الخرج:

TEXT 📖 للعرض فقط
Please enter your name: 
Please enter your age: 
Hello, ! Next year you  years old。

نتيجة التشغيل:

TEXT 📖 للعرض فقط
Please enter your name: Xiao Ming
Please enter your age: 18
Hello,Xiao Ming!Next year you 19 years old。
💡 نصيحة: يوضح هذا البرنامج الإدخال/الإخراج الأساسي في C++ — std::cin يقرأ إدخال المستخدم من لوحة المفاتيح، std::cout يُخرج على الشاشة. std::string هو نوع السلاسل النصية في C++، والذي يتطلب #include <string>.


❓ أسئلة شائعة

س هل C++ صعبة لدرجة لا تستحق التعلم؟
ج هل يستحق ذلك يعتمد على أهدافك. العمل في أنظمة منخفضة المستوى/ألعاب/تداول عالي التردد/أنظمة مدمجة → C++ ضرورية؛ العمل في خلفيات الويب/تحليل البيانات/ذكاء اصطناعي → Python/Java أكثر ملاءمة. C++ صعبة، لكن بمجرد تعلمها، يصبح المنطق الداخلي للغات الأخرى شفافًا.
س أيهما أصعب، C++ أم Java؟
ج C++ أصعب. Java لديها جمع القمامة فلا تدير الذاكرة يدويًا؛ C++ تتطلب منك new/delete بنفسك — انسَ وتحصل على تسرب ذاكرة. لكن Java لديها عبء أداء الآلة الافتراضية، لذا محركات الألعاب/التداول عالي التردد لا تزال تستخدم C++.
س هل أحتاج تعلم C قبل C++؟
ج لا. C++ لغة مستقلة يمكنك تعلمها مباشرة. تعلم C أولًا ثم C++ سيكون أسرع (بنية مشابهة)، لكن بالاتجاه المعاكس ستجد C "بدائية" (لا أصناف/قوالب/std::string).
س ما هي مكتبة C++ القياسية (STL)؟
ج STL (مكتبة القوالب القياسية) هي ترسانة C++ — حاويات (vector/map)، خوارزميات (sort/find)، مكررات. تعلم STL يرفع الكفاءة 10 أضعاف؛ المرحلة 6 ستغطيها بعمق.

📖 ملخص


📝 تمارين

  1. أساسي (صعوبة ⭐): ابحث عن "برمجيات/ألعاب/أنظمة مشهورة مكتوبة بـ C++" واذكر 5 على الأقل لتقدير اتساع تطبيقات C++.

  2. متوسط (صعوبة ⭐⭐): هل لديك مترجم C++ مثبت على حاسوبك؟ افتح طرفية/سطر أوامر واكتب g++ --version أو clang++ --version لترى إن كان هناك خرج. إن لم يكن، سجّل إصدار نظام التشغيل (Windows 10/11؟ macOS؟ أي توزيعة Linux؟) — الدرس القادم سيعلّمك كيفية تثبيت واحد.

  3. تحدي (صعوبة ⭐⭐⭐): لدى C++ مقولة شهرة — "تعلم صياغة C++ فقط دون تعلم أساسيات الحاسوب غير مجدي عمليًا." ابحث واقرأ مقالًا عن "ما أساسيات الحاسوب التي تحتاجها لتعلم C++" (جرّب البحث عن "هل تحتاج تعلم بنية الحاسوب قبل C++")، واكتب تأملًا بـ 200 كلمة أو أقل: هل تعتقد أنك بحاجة لتعلم C قبل C++؟ لماذا؟

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%