بسم الله لرحمن الرحيم
السلام عليكم و رحمة الله وبركاته أما بعد:
أرجو أن يكون الدرس الماضي مفهوماً . وفي هذا الدرس سنكمل ما بدأناه في الدوال.
* بعض الملاحظات على الدرس السابق:
معظم البرامج المكتوية في الدرس السابق كانت عبارة عن دوال مدرجة والمقصود هو " أن الأعلان عن الدالة هو نفسه جسم الدالة " . و لكن يمكن الإعلان عن رأس الدالة و أيضاً كتابة جسمها في أي جزء من البرنامج و إليك المثال التالي :
#include
//Function sum
float sum( float a, float b );
int main( )
{
float x,y;
cout<< “please enter Tow numbern”;
cin >> x >> y;
cout B)
{
return a+b;
}* لاحظ أن الإعلان عن الدالة بكتابة المخرج منها و الوسائط "المدخلات" و ينتهي بفاصلة منقوطة، إذا لم يكن هنالك مخرج فضعvoid و إذا لم يكن هنالك مدخلات فترك بين القوسين فاضي.
•الآن نعود لدرس اليوم وهو استخدام الكلمة المحجوزة inline مع الدوال:
*فائدة inline التي تسمى بالدالة ذات السطر الواحد أن صح هذا التعبير :
هو أنها تعمل على كونها تلميح للمترجم أن هذه الدالة عبارة عن دالة مدرجة فلا يعمل لها استدعاء حقيقي ، و لكن يمكن أن يتجاهل المترجم التلميح و يعمل استدعاء حقيقي للدالة . والعمل هو كأنما قمت بكتابة تعليمات جسم الدالة داخل الدالة التي تقوم بعملية الاستدعاء أي كأنك قمت بعملية نسخ للأوامر من جسم الدالة وكتبتها في الدالة التي تستدعي، و الفائدة المهمة والله أعلم أنها سرعة في التنفيذ أفضل من استخدام دالة بسيطة بدون أن تضع inline .
*متى تستخدم inline :
استخدمها عندما تكون الدالة تقوم بعمل بسيط و واحد على الأقل ، أي عندما تكون ةهنالك تعليمة أو اثنتين فقط فستخدم inline كحل أفضل و ليس أجباري لأنه تعمل الدالة بشكل مناسب وتؤدي العمل بدون وجود inline فلا تقلق عند عدم فهمك لهذا الموضوع.
* مثال :
#include
//inline function max
inline float max( float a,float B)
{
return (a >b ?a:B);
}
int main ( )
{
float x,y;
cout<<”please enter Tow numbern”;
cin>> x >> y;
cout << “ max is : “ << max(x,y) <<”n”;
return 0;
}" و أي دالة بسيطة أو تحتوي على أوامر بسيطة استخدم inline أفضل".
* موضوع جديد قدمته c++ وهو function over loading :
" ومعناه استخدام أكثر من دالة بنفس الاسم".
*فائدته :
" قد يكون عندك برنامج يحتوي على عدد من الدوال تقوم بجمع رقمين من أي نوع فبدلاً من أنك تقوم بتعريف دوال مختلفة في الأسماء ، ماعليك ألا أن تقوم بتعريف نفس الدوال بنفس الاسم".
*" وتوفر لك هذه الخاصية ما يلي :
1-أن يكون المخرج من الدوال مختلفاً من أي نوع .
2-أن تكون الوسائط " المدخلات " مختلفة الترتيب أو النوع أو العدد .
ملاحظة:
" لا تقم بتعريف دالة تحتوي على نفس المدخلات و نفس المخرجات مع اختلاف الاستخدام في جسم الدالة لأن المترجم لا يدري من يستدعي و ‘ذا استدعى فمن الارجح أن تكون الدالة المكتوبة أولاً " .
* مثال نختم به الدرس :
#include
//Function over loading max
int max( int a,int B)
{
return (a>b?a:B);
}
float max(float a,float B)
{
return (a>b?a:B);
}
float max(float a,int B)
{
return (a>b?a:B);
}
double max( float a,int b,float c)
{
if( a>b && a>c)
return a;
else if( b>c)
return b;
else
return c;
}
int main ( )
{
float x1,x2,x3;
int y1,y2;
cout << “please enter Three number floatn”;
cin >> x1 >> x2 >> x3;
cout <<”please enter Tow number integern”;
cin >> y1 >>y2;
cout << “ max is : “ << max(x1,x2) <<”n”;
cout <<” max is : “ << max(y1,y2) <<”n”;
cout << “max is : “ << max(x2,y2,x3) <<”n”;
cout <<”max is : “ <
return 0;
}