Overload کردن عملگر در ++C — راهنمای جامع

۱۲۷۷ بازدید
آخرین به‌روزرسانی: ۲۹ شهریور ۱۴۰۲
زمان مطالعه: ۳ دقیقه
Overload کردن عملگر در ++C — راهنمای جامع

امکان تغییر دادن طرز کار عملگر در ++C (برای انواع تعریف‌شده از سوی کاربر) وجود دارد. در این مقاله با روش پیاده‌سازی قابلیت Overload کردن عملگر در ++C آشنا خواهیم شد. برای مطالعه بخش قبلی این سری مقالات آموزشی روی لینک زیر کلیک کنید:

معنای یک عملگر برای متغیری از نوع مقدماتی مانند int ،float ،double و غیره همواره یکسان است. برای نمونه برای افزودن دو عدد صحیح از عملگر + استفاده می‌شود. با این حال در مورد انواع تعریف شده از سوی کاربر (مانند شیءها) می‌توان طرز کار عملگر را بازتعریف کرد. به مثال زیر توجه کنید:

اگر دو شیء از یک کلاس وجود داشته باشند که به عنوان عضو داده‌ای خود شامل رشته باشند، می‌توانید معنای عملگر + را بازتعریف کنید تا آن رشته‌ها را به هم الحاق کند. این قابلیت در زبان برنامه‌نویسی ++C به برنامه‌نویس اجازه می‌دهد که معنای یک عملگر را بازتعریف کنید و به نام Overload کردن عملگر شناخته می‌شود.

کاربرد Overload کردن عملگر در C++‎

ما می‌توانیم بدون حتی اطلاع از Overload کردن عملگر برنامه‌هایمان را در ++C بنویسیم، اما این عملگر از سوی برنامه‌نویس‌ها به طور گسترده‌ای برای شهودی‌تر ساختن برنامه‌ها مورد استفاده قرار می‌گیرد.

برای نمونه به کد زیر توجه کنید:

1calculation = add(multiply(a, b),divide(a, b));

کد فوق را می‌توان با کدی مانند زیر عوض کرد:

1calculation = (a*b)+(a/b);

نحوه Overload کردن عملگر در C++‎

برای Overload کردن یک عملگر، یک تابع عملگر خاص درون یک کلاس به صورت زیر تعریف می‌شود:

1class className
2{
3    ... .. ...
4    public
5       returnType operator symbol (arguments)
6       {
7           ... .. ...
8       } 
9    ... .. ...
10};
  • در کد فوق returnType همان نوع بازگشتی تابع است.
  • در ادامه returnType تابع یک کلیدواژه operator آمده است.
  • Symbol همان نماد عملگری است که می‌خواهیم overload کنیم. مثلاً می‌توانیم از +، >، -، ++ استفاده کنیم.
  • شما می‌توانید همانند تابع‌ها آرگومان‌هایی به تابع عملگر ارسال کنید.

مثال

1#include <iostream>
2using namespace std;
3class Test
4{
5   private:
6      int count;
7   public:
8       Test(): count(5){}
9       void operator ++() 
10       { 
11          count = count+1; 
12       }
13       void Display() { cout<<"Count: "<<count; }
14};
15int main()
16{
17    Test t;
18    // this calls "function void operator ++()" function
19    ++t;    
20    t.Display();
21    return 0;
22}

خروجی

Count: 6

این تابع زمانی که عملگر ++ روی شیء کلاس Test عمل می‌کند فراخوانی می‌شود. در این مثال منظور شیء t است. در برنامه فوق تابع عملگر زیر درون کلاس Test تعریف شده است:

1void operator ++ ()

این تابع مقدار count را برای شیء t یک واحد افزایش می‌دهد.

نکات مهم

  1. Overload کردن عملگر امکان بازتعریف طرز کار عملگر را در مورد صرفاً انواع تعریف شده از سوی کاربر یعنی اشیا و ساختارها می‌دهد. نمی‌توان از آن برای انواع داخلی این زبان مانند int ،float ،char و غیره استفاده کرد.
  2. دو عملگر = و & به صورت پیش‌فرض از سوی ++C به صورت Overload در آمده‌اند. برای نمونه برای کپی کردن اشیایی از کلاس یکسان می‌توانید مستقیماً از عملگر = استفاده کنید. بدین منظور نیازی به ایجاد یک تابع عملگر وجود ندارد.
  3. Overload کردن عملگر نمی‌تواند تقدم و پیوستگی عملگرها را تغییر دهد. با این حال اگر می‌خواهید ترتیب محاسبه را عوض کنید، می‌توانید از پرانتز استفاده کنید.
  4. چهار عملگر وجود دارند که نمی‌توان در ++C آن‌ها را Overload کرد. این‌ها عملگرهای :: (تشخیص دامنه)، . (انتخاب عضو)، *. (انتخاب عضو از طریق اشاره‌گر به تابع) و :‌? (عملگر سه‌تایی) است.

بهترین رویه‌ در زمان استفاده از Overload کردن عملگر کدام است؟

Overload کردن عملگر امکان تعریف طرز کار عملگر را به روش دلخواهمان فراهم می‌سازد. در مثال فوق، عملگر ++ روی یک شیء عمل می‌کند، زیرا مقدار عضو داده‌ای count را 1 واحد افزایش می‌دهد.

1void operator ++() 
2    { 
3        count = count+1; 
4    }

با این حال اگر از کد زیر استفاده کنید، مقدار count با استفاده از عملگر ++ به میزان 100 واحد کاهش می‌یابد.

1void operator ++() 
2    { 
3        count = count-100; 
4    }

این وضعیت ممکن است از نظر فنی صحیح باشد، اما این کد سردرگم‌ کننده است و درک و دیباگ کد را دشوار می‌سازد. وظیفه شما به عنوان یک برنامه‌نویس این است که از Overload کردن عملگر به طرز صحیح و منسجمی استفاده کنید.

در مثال فوق مقدار count در زمان استفاده از عملگر ++ یک واحد افزایش می‌یابد و با این حال برنامه ناقص است، زیرا نمی‌توان از کدی مانند زیر استفاده کرد:

1t1 = ++t

دلیل این مسئله آن است که نوع بازگشتی تابع عملگر void است. برای مطالعه بخش بعدی روی لینک زیر کلیک کنید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۸ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
programiz
۲ دیدگاه برای «Overload کردن عملگر در ++C — راهنمای جامع»

واقعا خوب بود ممنونم

دمتون گرم و خدا قوت

منتظر دیگر مطالبتون هستم

به امید روزی که سرچ فارسی جوابگوی نیاز باشه …..

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *