اول این که میدونیم امضای سربارگذاری عملگر به شکل زیر هست
return_type operator operator_function_name([argument_list]);
به عنوان مثال
class Car {...};
Car operator*(Car &C1, Car &C2){...}
// or
Car Car::operator+(Car &otherCar){...}
چند تا نکتهی ابتدایی به صورت زیر هست
۱- تغییر تعداد آرگومانهای یک تابع عملگر ممکن نیست.
۲- نوع برگشتی جزو امضای تابع نیست بنابراین در سربارگذاری الزامی در موردش وجود نداره.
۳- عملگرهای -
، +
، *
و &
هم به صورت یکانی و هم دوتایی قابل سربارگذاری هستن.
۴- عملگرهای .
، .*
، ::
و ?:
قابل سربارگذاری نیستن.
۵- چون عملگر روی اشیا کار میکنه نه کلاسها، در صورتی که از شیوهی اول استفاده میکنیم (تابع عضو) نباید به صورت ایستا تعریف بشه
۶- در صورتی که از شیوهی دوم استفاده میکنیم (تابع دوست) آرگومان اول همون شی فراخوانندهی تابع عملگر (یعنی سمت چپ عملگر هنگام فراخوانی) هست. در مثال بالا C1
. که در اجرای کد Car Car1, Car2, Car3; Car3 = Car1 + Car2;
معادل Car1
هست.
۷- اولویت و تعداد آرگومانها قابل تغییر نیست.
۸- به جز عملگر ()
در بقیهی عملگرها نمیشه به آرگومانها مقدار پیشفرض داد.
۹- سربارگذاری عملگرهای تخصیص و آزادسازی حافظه (new
، delete
، new[]
و delete[]
) تابع قوانین مشخصی جدا از قوانین بالا هست.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)