أساسيات لغة السى بلس بلس

أساسيات لغة السى بلس بلس

يحتوي هذا الفصل علي :
· لماذا نحتاج إلي البرمجة الكائنية
· اللغات الإجرائية مقابل اللغات الكائنية
· خصائص اللغات الكائنية
· الفئات والكائنات
· التوارث
· السي و السى بلس بلس
·
] تنويه : يقصد بمصطلح " المترجم " في هذا الفصل محول الصياغة Comoiler [
هيكل برنامج السى بلس بلس
المتغيرات variables
الإدخال والإخراج بواسطة count, cin
المؤثرات الحسابية arithmetic operators
مؤثرات التخصيص والتزايد assignment and increment operators
لأية لغة أساسيات يجب عليك الإحاطة بها قبل أن تكتب سطرا واحدا لبرنامج لها . وسوف يقدم لك هذا الفصل ثلاثة من هذه الأساسيات للغة السى بلس بلس ؛ هيكل البرنامج , والمتغيرات , والإدخال والإخراج . كما يتناول الفصل سريعا خصائص أخري لهذه اللغة , منها التطبيقات والمؤثرات الحسابية ومؤثرات التزايد وتحويل البيانات والدوال المكتبية . وأغلب هذه الموضوعات ليس صعبة التصور , ولكنك قد تجد أسلوب صياغة السى بلس بلس مقتضية لحد ما بالنسبة للغات الأخري التي قد يكون بعضها متأنقا أو مطنبا في صياغته دون داع . ولذلك فقد تجد صياغة السى بلس بلس أقرب للغة الرياضيات منها للغات البرمجية , ولكنك سرعان ما ستتعود عليها .

الهيكل الأساسي لبرنامج السى بلس بلس

تمعن في صياغة المثال في الفصل السابق , وإليك صياغته :
First.cpp
First.cpp


 


#include <iostream.h>


 


void main()


   {


   cout << "Every age has a language of its own";


   }









فبالرغم من صغر حجمه , فهو يتضمن قدرا لا بأس به من المعلومات حول هيكل برنامج السي++ , ولنتفحص البرنامج بالتفصيل .


الدوال



الدوال هي واحدة من اللبنات الأساسية لبرنامج السى بلس بلس , ويضم البرنامج المبين دالة واحدة هي الدالة main() , والجزء الوحيد الذي لا تضمنه هذه الدالة من البرنامج هوinclude <iostream.h> #


والذي سنعرض له حالا .


وكما قدمنا في الفصل الأول , يمكن أن تكون الدوال جزءا من فئة كائنية ما , حيث تدعي في هذه الحالة " دالة منتمية member function " , أو دوال مستقلة stand alone . ولما كنا غير مستعدين للحديث عن الكائنات بعد , فسوف نقصر حديثنا علي النوع الثاني من الدوال .


اسم الدالة



تتميز الدوال بقوسين يتبعان اسمهما كما هو واضح في الدالة التي نحن بصددها , وبدون هذين القوسين لن يتعرف المترجم علي اسمها كدالة , بل قد يتصورها أحد عناصر البرنامج الأخري كمتغير من المتغيرات مثلا . وبعد حين سنري أن القوسين ليسا فارغين دائما , بل يمكن أن يملأ بما يسمي " معاملات الدالة argumenmts " وهي القيم التي ترحل ( تمرر ) الدالة لكي تمارس عليها وظيفتها .


وتشير كلمة void السابقة علي اسم الدالة إلي أنه ليس مطلوبا منها أن تعيد قيمة ما , وسوف نزيدك إيضاحا عن ذلك في الوقت المناسب ] أنظر استخدام الدالة sqrt() في البرنامج sqrt.cpp لاحقا في هذا الفصل [ .


الأقواس الحلزونية ومحتوي الدالة



يحاط محتوي الدوال بقوسين حلزونيين يلعبان دور الأمرين BEGIN, END في الباسكال , فهذه الأقواس تحدد بدء عبارات الدالة ونهايتها , وكل دالة يجب أن تكون لها مثل هذه الأقواس لهذا الغرض , وفي دالتنا هذه ليس لدينا إلا عبارة واحدة محتواة بين القوسين , متمثلة في السطر الذي يبدأ بالأمر count .


إبدأ دائما بالدالة main()



حينما يشغل برنامج سي أو سي ++ فإن أول أمر ينفذ هو الذي تبدأ به الدالة main() , فالبرنامج قد يحتوي علي العديد من العناصر , ولكن البداية دائما تكون مع هذه الدالة . فإذا لم توجد مثل هذه الدالة في البرنامج , فإن الرابط سوف يصدر رسالة خطأ .


وكما سنري لاحقا , تقوم الدالة main() باستدعاء دوال في كائنات البرنامج , أو دوال مستقلة , وهذا مبين في الشكل



Objects, functions and main()


شكل الدالة main() ودوال البرنامج


عبارات البرنامج



عبارات البرنامج statements هي اللبنات الأساسية له , ولدينا منها واحدة فقط في البرنامج first.cpp , ألا وهي العبارة :


Count << '' Every age has a language of its own '' ;


وهذه العبارة تخبر الحاسوب أن يخرج العبارة النصية المحتواة بين علامتي التنصيص هذه الشاشة . وأغلب العبارات تخبر الحاسوب أن ينفذ شيئا ما . وتنتهي كل عبارة بفاصلة منقوطة , وهي قاعدة غاية في الأهمية , ومع ذلك فمن السهل نسيانها , وذلك علي العكس من لغات أخري كالبيزك مثلا , والتي فيها تنتهي العبارة بإنتهاء السطر . وعلي ذلك فلك أن تتوقع في بداية عهدك بلغة السي عموما رسائل أخطاء جمة بسبب نسيان هذه القاعدة .


الفراغات



ليس للفراغات أي تأثير علي تشغيل البرنامج , فإذا قمت بعملية إزاحة لمسافة إضافية سواء بالمسطرة أو بمفتاح tap , أو انتقلت لسطر جديد قبل إنهاء العبارة , كل ذلك لا يشعر به المترجم , فلو أنك كتبت البرنامج الذي نحن بصدده علي الوجه التالي :


Include <iostream.h>#


Void main() { cout


<<


''Every age has a languge of his own'';


}


لما تأثر تشغيل البرنامج , رغم أن الصياغة المبينة تخرج عن المألوف وصعبة المتابعة , ولذا يوصي بإتباع الأعراف المستقرة في صياغة البرامج .


ولقاعدة عدم تأثير الفراغات عدة استثناءات , نذكر منها هذا السطر الأول من البرنامج . فالسطر الأول الذي يبدأ بعبارة Include # يسمي " موجه المترجم ( أو ما قبل المعالج )


preprocessor directive " , فيجب أن يكون علي سطر واحد .


أيضاً لا يمكن أن تفصل عبارة نصية كتلك المحصورة بين علامتي التنصيص في البرنامج المعطي في سطرين , ] وإلا سيعتبرك المترجم أنك نسيت الفاصلة المنقوطة ويصدر لك رسالة خطأ [ وإذا كانت العبارة من الطول بحيث ستحتاج لأكثر من سطر , فإن الطريقة المتبعة هي أن نستخدم الشارطة العكسية "\ " لإخبار المترجم بعدم انتهاء العبارة , أو تقسيمها إلي عبارتين كل منهما بين علامتي تنصيص خاصة بها .


الإخراج باستخدام cout <<



كيف يمكن للعبارة


Cout << ''Every age has a language of his own'''


أن تسبب إظهار العبارة النصية علي الشاشة ؟ إن الرمز cout هو في واقع الأمر اسم كائن معرف في لغة السى بلس بلس , وينتمي إلي ما يعرف بــــــــ " تدفق الخرج القياسي standard output stream'' , ومصطلح تدفق strom " تجريد لعملية سريان البيانات وتدفق الخرج القياسي يجري عادة في اتجاه الشاشة . ( وإن كان يمكن توجيهه وجهة أخري , علي ما سوف نعرض له في الفصل الرابع عشر )


والمؤثر << هو دالة تنقل ما علي يمينها من بيانات لتضعها في كائن الإخراج cout الذي يتولي نقلها إلي جهاز الإخراج ( الشاشة في حالتنا ) , ويسمي "مؤثر الإيلاج , put to or insertion operator " ] بمعني أنه "يولج " البيانات في كائن الإخراج لينقلها إلي جهاز الإخراج [ . وفي برنامجنا يحمل العبارة النصية الكائن cout الذي يتولي إخراجها . ويبين الشكل نتيجة استخدام كل من مؤثر الإيلاج << وكائن الإخراج cout .



Output with cout


شكل الإخراج بواسطة cout <<




ثوابت العبارات النصية



العبارة بين علامتي التنصيص ''Every age has a language of his own '' تسمي " ثابت عبارة نصية string constant " . والثابت constant " في البرمجة – مقابل المتغير variable " – هو ما له قيمة لا تتغير علي مدي تشغيل البرنامج , إذ تحدد قيمته بواسطة المبرمج منذ البداية , ويظل ثابتا عليها .


وكما ستعلم لاحقا , فإن السي عامة تتعامل مع العبارات النصية بطريقتين متناقضتين , فهي لا تعترف بمتغيرات العبارات النصية , بل تعاملها معاملة المصفوفات , ولكنها تعترف بثوابت العبارات النصية , طالما وضعت بين علامتي تنصيص , كما هو واضح في المثال . وسنعلم المزيد عن العبارات النصية في الفصل الثامن .

التسميات: