100 lines
3.8 KiB
Markdown
100 lines
3.8 KiB
Markdown
---
|
|
title: C++ Overloading
|
|
localeTitle: C ++ التحميل الزائد
|
|
---
|
|
يتيح لك C ++ تحديد أكثر من تعريف واحد لاسم دالة أو مشغل في نفس النطاق ، وهو ما يسمى التحميل الزائد للوظيفة والحمولة الزائدة على المشغل على التوالي.
|
|
|
|
الإعلان المفرط عبارة عن إعلان يتم الإعلان عنه بنفس الاسم مثل الإعلان المعلن مسبقًا في نفس النطاق ، باستثناء أن كلا التعريفين لهما حجج مختلفة و تعريف مختلف بشكل واضح (تطبيق).
|
|
|
|
عندما تقوم باستدعاء وظيفة أو مشغل فوق طاقتها ، يحدد المحول البرمجي التعريف الأكثر ملاءمة للاستخدام ، من خلال مقارنة أنواع الوسيطات التي استخدمتها للاتصال بالوظيفة أو المشغل باستخدام أنواع المعلمات المحددة في التعريفات. وتسمى عملية اختيار الوظيفة أو المشغل الأكثر انشغالاً بالجلسات الزائدة.
|
|
|
|
### وظيفة الحمولة الزائدة في C ++
|
|
|
|
يمكنك الحصول على تعريفات متعددة لنفس اسم الوظيفة في نفس النطاق. يجب أن يختلف تعريف الدالة عن بعضها عن طريق أنواع و / أو عدد الوسيطات في قائمة الوسائط. لا يمكنك تحميل الإعلانات الدالة التي تختلف فقط حسب نوع الإرجاع.
|
|
|
|
المثال التالي هو المثال الذي يتم فيه استخدام نفس وظيفة الطباعة () لطباعة أنواع مختلفة من البيانات -
|
|
|
|
`#include <iostream>
|
|
#include <string>
|
|
using namespace std;
|
|
|
|
class printData {
|
|
public:
|
|
void print(int i) {
|
|
cout << "Printing int: " << i << endl;
|
|
}
|
|
void print(double f) {
|
|
cout << "Printing float: " << f << endl;
|
|
}
|
|
void print(const string& s) {
|
|
cout << "Printing string: " << s << endl;
|
|
}
|
|
};
|
|
|
|
int main() {
|
|
printData pd;
|
|
|
|
// Call print to print integer
|
|
pd.print(5);
|
|
|
|
// Call print to print float
|
|
pd.print(500.263);
|
|
|
|
// Call print to print string
|
|
pd.print("Hello C++");
|
|
|
|
return 0;
|
|
}
|
|
`
|
|
|
|
عندما يتم تجميع التعليمات البرمجية المذكورة أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
|
|
|
|
`Printing int: 5
|
|
Printing float: 500.263
|
|
Printing string: Hello C++
|
|
`
|
|
|
|
### مشغل الحمولة الزائدة في C ++
|
|
|
|
يمكن أيضًا تحميل معظم المشغلات المضمنة في C ++. يسمح هذا للمبرمجين بتعيين تطبيق مختلف للمشغلين حسب الحجج. يمكن أن تعمل هذه المشغلات ذات التحميل الزائد للفئة المحددة من قبل المستخدم.
|
|
|
|
`#include<iostream>
|
|
using namespace std;
|
|
|
|
class Complex_Number{
|
|
private:
|
|
int real;
|
|
int imag;
|
|
public:
|
|
Complex_Number(int i = 0, int j =0)
|
|
{
|
|
real = i;
|
|
imag = j;
|
|
}
|
|
//Here the operator '+' is being overloaded
|
|
Complex_Number operator + (Complex_Number const &a)
|
|
{
|
|
Complex_Number x;
|
|
x.real = real + a.real;
|
|
x.imag = imag + a.imag;
|
|
return x;
|
|
}
|
|
void print()
|
|
{
|
|
cout<<real<<" + i"<<imag<<endl;
|
|
}
|
|
};
|
|
|
|
int main()
|
|
{
|
|
Complex_Number c1(3, 2), c2(1, 1);
|
|
//Here, the overloaded operator is called. The numbers get added according to the function defined
|
|
Complex_Number c3 = c1 + c2;
|
|
c3.print();
|
|
}
|
|
`
|
|
|
|
الناتج عن البرنامج أعلاه
|
|
|
|
`4 + i3
|
|
` |