الدوال في C++

الدوال

هذا الفصل يحتوي علي :

تعريف الدوال والإعلان عنها Function definition and declaration

ترحيل المعاملات Parameters passing

إمرار المعاملات بالقيمة وبالإشارة Passing by value and passing by reference

الدوال زائدة التحميل Function overloading

معاملات الاختيار المبدئي Default arguments

فئات التخزين Storage classes

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

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

Object-Oriented Programming in C   _Page_0188_Image_0001

شكل التحكم في استثارة الدوال

الدوال البسيطة

مثالنا الأول هو دالة بسيطة تقوم بطباعة سطر من 45 نجمة , وتستخدم بعد ذلك في كل جدول

Table

البرنامج كالأتي :

***************************************

Data type range

***************************************

Char - 128 to 127

Int - 32,768 to 32.767

Double - 2,147,483,648 to 2,147,483,647

***************************************

ويحتوي البرنامج علي دالتين , الدالة الرئيسية main() والدالة الفرعية starline() .

ولقد مرت عليك الدالة الرئيسية , فما هو المطلوب لإضافة دالة فرعية إلي برنامج ؟

يتطلب ذلك ثلاثة أشياء , الإعلان عن الدالة declaration , استدعاء الدالة calling , وتعريف الدالة definition .

الإعلان عن الدوال

بالضبط كما لا يمكنك استخدام متغير دون أن تخبر محول الصياغة عنه , لا يمكنك أن تستخدم دالة دون أن تعرفه بها . وفي برنامجنا المعطي , يتم ذلك بالإعلان عن الدالة في بداية البرنامج بالسطر :

Void starline();

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

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

استدعاء الدوال

استدعاء الدالة يعني استثارتها للعمل , ويكون ذلك بذكر اسمها في سطر من أسطر الدالة المستدعية , كما في السطر التالي من الدالة main()

Starline();

والذي تكرر ثلاث مرات .

ويتسبب استدعاء الدالة أن ينتقل إليها التحكم في تنفيذ البرنامج , ثم يعاد التحكم للدالة المستدعية بعد أن تنتهي الدالة المستدعاة من عملها .

تعريف الدوال

نأتي أخيرا للدالة نفسها , وتعريفها يتضمن سطرا في بدايتها ينوه عنها يسمي سطر التنويه declarator , ثم كتلة الأوامر , أي الأسطر الخاصة بأوامرها متضمنة بين القوسين الحلزونيين المعتادين , ويطلق " مضمون الدالة body "

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

ويبين الجدول الأجزاء الثلاثة الخاصة باستخدام الدوال .

Object-Oriented Programming in C   _Page_0191_Image_0001

شكل صياغة الدوال

العنصر

الوظيفة

أمثلة

الإعلان (النمط الأولي)

توصيف الدالة : اسمها , عدد ونوع المعاملات التي تحتاج لها , نوع القيمة التي تعيدها , ينتهي بفاصلة منقوطة

Void func();

Void func(int);

Int func(int)

الاستدعاء

استثارة الدالة نفسها

Func();

التعريف

صياغة الدالة نفسها

Void func()

{

/// lines of code

}

التنويه

أول سطر في التعريف ,

نفس وظيفة الإعلان,

تسمية المعاملات

Void func()

Voie func(int)

Int funce(int)

التسميات: