بسم الله الرحمن الرحيم
فى هذا الموضوع
نبذه تاريخية عن اللغة
عندما تم اصدار لغة السي انتشرت بسرعة كبيره و اصبح لها شعبيه واضحه، لذا في عام 1979 قام بـِيّان سُتْرُءُسُتْرُبْ[2] بالبدء فى كتابة Preprocessor للغة السي لإضافة دعم OOP داخلها و تم تسميته فى البدايه بالإسم New C و بعدها تم تغييره إلى C with Classes. النسخه المعدله تم إضافة العديد من المزايا لها مثل Classes و Virtual functions و Operator overloading و free-store و تم إصدار أول مترجم عام 1983 و اسمه CFront حيث يقوم بتحويل الكود إلى لغة السي قبل ترجمته[3]، و في نفس العام تم تغيير إسم اللغه إلى ++C وذلك بوضع الـ increment operator ليدل على التحسينات و الإضافات الجديده باللغه و صاحب التسميه هو Rick Mascitti.
في عام 1985 تم إصدار كتاب The C++ Programming Language ليكون اول مرجع للغه.
فى عام 1989 تم إصدار النسخه الثانيه من لغة ++C و تم إضافة مزايا جديده مثل multiple inheritance و abstract classes و static member functions و const member functions و protected members.
فى عام 1990 تم إصدار كتاب The Annotated C++ Reference Manual ليكون بمثابة البنية الأولي لوجود Standards لقواعد اللغه.
فى عام 1991 تم إصدار النسخه المحدثه من كتاب The C++ Programming Language.
فى الإصدارات التاليه للغه حتى عام 1993 تم إضافة مزايا أخرى مثل exceptions handling و namespaces و cast operators و boolean datatype.
فى عام 1993 تم إيقاف العمل فى الإصدار الرابع من المترجم Cfront حيث فشلت محاولات إضافة الـ Exception handling به.
فى عام 1994 تم إصدار كتاب ++The Design and Evolution of C و الذي يحتوى على القواعد الذى اعتمد عليها بـِيّان سُتْرُءُسُتْرُبْ فى تصميم اللغة.
فى عام 1998 قامت المجموعه ISO/IEC JTC1/SC22/WG_21 يإصدار اول Standard للغة ++C و تم اضافة معايير محددة لمكتبة اللغة[4] و التى تسمي STL، هذا الإصدار سمي بـ C++98.
فى بضع سنوات تم إكتشاف بعض العيوب فى تصميم C++98 و تم كتابة بعض التقارير للمجموعة المسئوله عن اللغة.
فى عام 2003 تم إصدار ثاني Standard للغه و الذى يحتوى على جميع التعديلات التى تم إقتراحها باللغه و مكتباتها.
فى عام 2005 تم إقتراح تعديلات على مكتبات اللغه و تم إصدارها بشكل غير رسمي تحت الإسم Library Technical Report 1 او اختصارا TR1 و لكن لم يتم إعتماد التعديلات بشكل رسمي داخل اللغة.
بدءا من عام 2005 و حتى أواخر عام 2011 تم العمل على إضافات و تحسينات كبيره باللغه و التى تم تسميتها C++0x.
فى اواخر عام 2011 و بالتحديد فى 12 اغسطس 2011 تم إعتماد و إصدار لغة C++11 و التى تحتوى على العديد من الإضافات الجديده و التحسينات باللغه نفسها و مكتباتها.
هل تقول FAQ!
الـ FAQ هى عباره عن مجموعة من الأجوبه على مشاكل برمجيه تواجهنا كثيرا، فسواء كنت مبرمج مبتدء او متمرس او مخضرم فدائما ستجد اجابه لسؤالك بها، المشكله هنا ان كاتبها لابد ان يكون على درايه تامه بكل جوانب اللغه و هذا امر صعب مع لغة مثل ++C، و حيث انه توجد العديد من الـ FAQ متاحه بأكثر من لغه فإن إعادة إحداها لن يكون فعال، فيكفي ان اقوم بترجمتة إحداها و سيفي بالغرض و لكن هذا لن اقوم بفعله هنا، حيث سأقوم بكتابتها من الـ Standard و هذا لعدة اسباب منها:
1- الـ Standard يحتوى على كل ما تريد و لا يتم التعديل عليه إلا مع إصدار جديد من اللغه و هذا لا يحدث إلا كل بضع سنوات و بالتالي معلوماته ثابته.
2- ستتاح لك الفرصه لمعرفة كيف تقرأ من الـ Standard و بالتالي ستزداد قاعدة معارفك بأفضل مرجع على الإطلاق فى اللغه.
3- ستتعرف على قواعد اللغه بشكل لم تألفه من قبل.
4- كل جزء من اللغه يتم تناوله بأدق التفاصيل مع امثله محدده تخدم هذا الجزء فقط.
س: هل ستكون المحتويات مثل الموجوده بالـ Standard؟
ج: الـ Standard يتناول قواعد اللغه بشكل يجعل من الصعب اعتماده كماده للدراسه و بالتالي الإجابه هي لا، سيتم تناول جميع المواضيع بنفس الترتيب الموجود بالـ Standard و لكن بشكل أكثر وداً.
س: اى اصدار من اللغه سيتم تناوله؟
ج: الإصدارين C++03 و C++11، فى البداية سيتم إضافة C++03 و بعدها سيتم إضافة الجزء الخاص بالـ C++11.
أثناء الشرح قد تجد مرجع لنقطة/لنقاط معينه داخل الـ Standard، و هذا يعنى انى لم اقم بإضافة كل المعلومات الخاصه بهذه النقطه و السبب إما انها معلومات لا تهم مبرمج يستخدم اللغه و انما مبرمج يقوم بكتابة مترجم لها أو لأن هذه النقطه سيتم تناولها لاحقا و أيا كان السبب سيتم وضعه حينها.
المترجم و الـ IDE
المترجم: هو البرنامج الذى يقوم بتحويل الكود إلى نمط تفهمه الأله و في المواضيع الخاصة بلغة C++03 أى مترجم يدعم C++03 سيفي بالغرض.
IDE: هو البرنامج الذى تستخدم لكتابة الكود و إدارة المشاريع، فى حالتنا هذه اى محرر نصوص قد يفي بالغرض.
توجد العديد من المترجمات و الـ IDE متاحه للإستخدام فإذا كنت على دراية بالمترجم الذى تعمل به فافعل ما شئت طالما انك فى النهايه ستقدر على المتابعه و تنفيذ الكود المكتوب و الذى من المفترض ان يستطيع المترجم الذى تستخدمه ان ينفذه دون مشاكل، إذا كنت مبتدئ حينها استخدم VC++ 2008 Express كمترجم لـ C++03 و VC++ 2012 كمترجم [5] لـ C++11.
لاحظ انني أثناء المواضيع سألتزم بقواعد اللغه و سأعطيك امثله على انماط خاطئه و لكنى لن احدد رسالة الخطأ لأنها تختلف من مترجم لأخر، أيضا بعض اجزاء اللغه مرنه و هذا يتيح لكل مترجم ان يتعامل معها بشكل يختلف عن الاخر و سأقوم بإعطائك امثله وافيه و كافيه عن هذا الأمر في حينه.
نقاط أخرى
توجد العديد من الأسئله التى يكثر طرحها مثل ما فائدة ملفات الـ header و لماذا تستخدم و هكذا، مثل هذه النوعيه من الأسئله سيتم تناولها في وقتها بشكل يجعلك تفهمهم و تستوعبهم جيدا بإذن الله.
يوجد موضوع مخصص للأسئله المتعلقه بهذه الدروس فإن حدث و كان لديك سؤال مرتبط بهم فعليك بالرجوع لهذا الموضوع.
خاتمة
أسأل الله العظيم ان يوفقنى و إياكم بالإستفاده من هذا العمل و ان ينفعنا به.
إذا وجدت اى أخطأ من اى نوع يرجي مراستلي على الخاص بتفاصيل وافيه حتى يتسني لي إصلاحها.
و الله ولي التوفيق
[1]من صفحة اللغه بموقع wikipedia.
[2]إسمه Bjarne Stroustrup و اصله من الدنمارك و النطق الصحيح لإسمه من اللغه الدنماركيه هو "بـِيّان سُتْرُءُسُتْرُبْ".
[3]من صفحة المترجم Cfront على wikipedia.
[4]صفحة مكتبة اللغه بموقع wikipedia.
[5]حتى لحظة كتابة هذا الموضوع مترجم VC++ 2012 لا يدعم كافة امكانيات C++11، و عندما يتم البدء فى الأجزاء الخاصه بهذا الإصدار من اللغه سيتم تغيير هذا البيان لمترجم يدعم كافة امكانيات الإصدار C++11.