Latest web development tutorials

C ++ وظيفة الحمولة الزائدة والحمولة الزائدة المشغل

C ++ يسمح لأحد منالوظائف والشركات العاملةفي نفس المجال لتحديد تعريف أكثر من واحد، ويسمىوظيفة الحمولة الزائدةوالحمولة الزائدة المشغل.

بيان زائد واحد هو أن تم الإعلان في هذا المجال من قبل وظيفة أو أسلوب الإعلانات لها نفس الاسم، ولكن قائمة من المعايير والتعاريف (تحقيق) ليست هي نفسها.

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

في C ++ وظيفة الحمولة الزائدة

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

الأمثلة التالية، يتم استخدام نفس اسم وظيفةالطباعة () لانتاج أنواع مختلفة من البيانات:

#include <iostream>
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(char* c) {
        cout << "Printing character: " << c << endl;
      }
};

int main(void)
{
   printData pd;
 
   // Call print to print integer
   pd.print(5);
   // Call print to print float
   pd.print(500.263);
   // Call print to print character
   pd.print("Hello C++");
 
   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Printing int: 5
Printing float: 500.263
Printing character: Hello C++

في C ++ المشغل إثقال

يمكنك إعادة تعريف أو تجاوز معظم C ++ مشغلي المضمنة. وهكذا، يمكنك استخدام نوع مخصص من المشغل.

طاقتها المشغل مع اسم وظيفة خاصة، ويتبع اسم وظيفة من قبل المشغل الرئيسي والمشغل لتجاوز حرف. وغيرها من المهام، ومشغلي زائد لديها نوع عودة والقائمة المعلمة.

Box operator+(const Box&);

وأضاف بيان للشركة بالإضافة لكائنين بالغرف، العودة النهائية للكائنات صندوق. ويمكن تعريف المشغلين معظم طاقتها كما يتم تحديد الوظائف العادية أو غير الأعضاء وظائف عضو الفئة. إذا قمنا بتعريف الدالة أعلاه كما الطبقات وظيفة لغير الأعضاء، ثم نحن بحاجة لتمرير معلمتين لكل عملية، على النحو التالي:

Box operator+(const Box&, const Box&);

يوضح المثال التالي مفهوم المشغل إثقال دالة عضو. هنا، والكائن الذي تم تمريره كمعلمة، يمكن الوصول خصائص كائن باستخدامهذا المشغل على النحو التالي:

#include <iostream>
using namespace std;

class Box
{
   public:

      double getVolume(void)
      {
         return length * breadth * height;
      }
      void setLength( double len )
      {
          length = len;
      }

      void setBreadth( double bre )
      {
          breadth = bre;
      }

      void setHeight( double hei )
      {
          height = hei;
      }
      // 重载 + 运算符,用于把两个 Box 对象相加
      Box operator+(const Box& b)
      {
         Box box;
         box.length = this->length + b.length;
         box.breadth = this->breadth + b.breadth;
         box.height = this->height + b.height;
         return box;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   Box Box2;                // 声明 Box2,类型为 Box
   Box Box3;                // 声明 Box3,类型为 Box
   double volume = 0.0;     // 把体积存储在该变量中
 
   // Box1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);
 
   // Box2 详述
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);
 
   // Box1 的体积
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;
 
   // Box2 的体积
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;

   // 把两个对象相加,得到 Box3
   Box3 = Box1 + Box2;

   // Box3 的体积
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;

   return 0;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

شركات مثقلة يمكن / لا يمكن طاقتها مشغلي

هذه لائحة من مشغلي يمكن فوق طاقتها ما يلي:

+-*/%^
&|~!,=
<><=>=++--
<<>>==!=&&||
+=-=/=%=^=&=
|=*=<<=>>=[]()
->->*newnew []deletedelete []

هذه لائحة من المشغلين لا يمكن فوق طاقتها ما يلي:

::.*.?:

أمثلة من الحمولة الزائدة المشغل

وفيما يلي مجموعة متنوعة من الأمثلة المشغل إثقال لمساعدتك على فهم أفضل لمفهوم الحمولة الزائدة.

序号运算符和实例
1 一元运算符重载
2 二元运算符重载
3 关系运算符重载
4 输入/输出运算符重载
5 ++ 和 -- 运算符重载
6 赋值运算符重载
7 函数调用运算符 () 重载
8 下标运算符 [] 重载
9 类成员访问运算符 -> 重载