الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

OOP ,,over load operation

مغلق
بدأه demonmx في 18 يوليو 2005 · 5 رد · 889 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اسرة منتدى ++C اهلا وسهلا بكم

عندى سؤال طرح على ولم اجد له جوابا

السؤال انه :

فى لغة البرمجة الكائنية ماذا نعنى بالتحميل الزائد للعلامات

IN OOP ,,over load operation

>= , =<

ارجو منكم مساعدتى فى الجواب على هاذا التسائل

وشكراً لكم،

100% Muslim Sunni

█║│█│║▌║││█║

█║│█│║▌║││█║

3619003249802010

Mahjooob Ibrahim

█║│█│║▌║││█║

█║│█│║▌║││█║

3619003249802010

#2

التحميل الزائد للمعاملات يعد من قمة الرفاهيات التى تعطيها لك OOP.

ما هى فكرة التحميل الزائد للمعاملات ؟

حسنا, الكل يعلم هنا ان المعملات الاساسية مثل + و - و * و ..............

كل هذه العلامات لها دلالات عند العمل على المتغيرات الرقمية.

مثلا

int x,y,z

y = x + z

فى هذا السطر تم استخدام معاملين هما + و =

فى مثل هذه الاحوال تكون قيمة y هى القيمة التى تعادل نتيجة جمع x , y

عند التعامل مع متغيرات رقمية, نستعمل هذه المعاملات بدلالاتها البدائية التى يعرفها كل منا.

لكن ماذا لو كان هناك كائن من بين هذه المعملات, كيف سيتم التعامل معه.

المعاملات و الكائنات؟

تنقسم المعاملات الى قسمين رئيسيين. القسم الاول المعاملات التى تطبق على متغيرين فقط

مثل y+=r. هذا السطر من منا لا يعؤف معناه y = y + r .

حسنا لنفرض اننا نريد ان نطور class حتى تغلف لنا مفهوم ال Matrix.

من البديهى لاى مستخدم لهذه الكلاس ان يكتب الكود التالى.

Matrix x,y;
// after the intialization of both variables
x+=y;

ماذا عن هذا المعامل += و كيف يمكن لنا ان نضيف تعريفه الى الكلاس

const Matrix& operator+=(const Matrix& m)
{
    //here implement the multiplication operation
    //  *this = *this * m

   //at the end return the same object
   return *this;
}

اذا اضفنا هذه الدالة الى الكلاس Matrix نكون قد عرفنا هذا المعامل

اما عن الاعادة الى تعيدها هذه الدالة فهى للكمال فقط, و حتى يعمل مثل هذا السطر

z = (x+=y)

ماهو النوع الثانى للمعاملات؟

مثال لهذا النوع نفس الكلاس Matrix لنقل اننا نريد تعريف هذا السطر

z = x + y

z = x * y

فى مثل هذه الحالات نحتاج الى دالة خارجية غير تابعة للكلاس Matrix

و هى التى تقوم بالعملية, و اذا استدعى الامر من الممكن ان تكون friend

const Matrix& operator + (const Matrix& m1 , const Matrix& m2 )
{
       // the matrix that contians the result
       Matrix m;
 ///////////////////////////////////////////////////////
/////// here set m to be eqivalent to m1+m2
///////////////////////////////////////////////////////
  return  m;

}

هذه الدالة الخاريجية سوف تضيف المعامل +

و يمكنك لن تضيف المعاملات التى تريدها بالمدخلات الى تريدها

و ذلك على حسب متطلبات الكائنات التى تتعامل معها. و مدى ارتباطها ببعضها البعض.

#3

استاذ justnow

اشكرك على اجابتك السريعة ومعلوماتك المفيدة

الف شكر استاذى

100% Muslim Sunni

█║│█│║▌║││█║

█║│█│║▌║││█║

3619003249802010

Mahjooob Ibrahim

█║│█│║▌║││█║

█║│█│║▌║││█║

3619003249802010

#4

خد الكود دة سهل وبسيط يوضح العملية اكتر

#include <iostream>
#include <conio>
 #include <stdio>
 #include <stdlib>

class STRING
{
 private:
          enum { s=100 };
     char x;

 public:
         STRING()
          {
            x==NULL;
          }
         STRING(char X)
         {
           strcpy(x,X);
         }
         void GetData()
          {
           cout<<"enter the data:\t";   cin>>x;
          }
         void print()
         {
            cout<<"the value of object is:\t"<<x;
            cout<<"\n";
         }
         bool operator >(STRING &a2) const
          {
             if(strcmp(x,a2.x)<0)
               return true;
             else
               return false;
          }
         bool operator ==(STRING &a2) const
          {
             if(strcmp(x,a2.x)==0)
               return true;
             else
               return false;
          }
      STRING &operator=(STRING &a2)
          {
            strcpy(x,a2.x);
            return *this;
          }

       STRING operator+(STRING &a2) const
         {
           STRING tmp;
           if( strlen(a2.x)+strlen(x)<s )
            {
              strcpy(tmp.x,x);
              strcat(tmp.x,a2.x);

            }
            else  { cout<<"ERROR \n";    exit(0); }
            return tmp;

         }
       STRING &operator+=(STRING &a2) 
        {
          strcat(x,a2.x);
          return *this;
        }


};

void main()
{
 STRING o1;
  STRING o3,o2;

 o1.GetData();
 o2.GetData();
  //o3=o2+o1;
 o3=o1+=o2;

  o1.print();
  o2.print();
  o3.print();
 getch();
}

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#5

بس ملاحظة عالماشي: الـ Operator overloading ليس له علاقة بالـ Object Oriented Programmign PAradigm, يعني ليس جزء من فلسلفة البرمجة الكائنية, بل هو اضافة من السي بلص بلص.

#6

شكرا على المعلومة,

و اسف على كل حال

هذا الموضوع مغلق.

مواضيع مشابهة