View Full Version : overloading یه سوال از
mamad64bit
شنبه 18 آبان 1387, 10:01 صبح
چرا در هنگام سربارگذاری عملگرها در سی پلاس پلاس توابع عضو یک کلاس(member function)
نمیتواند در overloading شرکت کند که در اینصورت مجبور میشویم انها را به صورت friend کلاس مفروض تعریف کنیم
اگر بخوایم از توابع عضو استفاده کنیم باید چی کار کنیم ؟
#include<iostream.h>
class rat
{
friend rat operator*(const rat&,const rat&);
public:
rat(int a=0,int b=0){ num=a;den=b;}
private:
int num,den ;
};
rat operator*(const rat& x,const rat& y)
{
rat z(x.num*y.num , x.den*y.den);
return z;
}
Salar Ashgi
شنبه 18 آبان 1387, 22:14 عصر
چرا در هنگام سربارگذاری عملگرها در سی پلاس پلاس توابع عضو یک کلاس(member function)
نمیتواند در overloading شرکت کند که در اینصورت مجبور میشویم انها را به صورت friend کلاس مفروض تعریف کنیم
اگر بخوایم از توابع عضو استفاده کنیم باید چی کار کنیم ؟
====================================
سلام ، دوست عزیز ، همانطور که می دانید این مبحث Operator Overloading نام دارد
و نه Function Overloading ، یعنی ما یک عملگر (اپراتور) را سربارگذاری می کنیم و نه یک
تابع معمولی را ، هر چند که اپراتور همان نقش تابع را ایفا میکند ، دلیل استفاده از توابع
دوست این است : 1 ) چه مستقیم یا غیر مستقیم به اعضای داده ای دسترسی نداریم
2) (مهم) وقتی که ما بخواهیم خاصیت جابجایی بین دو شی کلاس برقرار باشد !!!! و ....
موفق و پیروز باشید !!!!
Nima_NF
شنبه 18 آبان 1387, 23:39 عصر
- شما باید operator* را به صورت public تعریف کنید نه خصوصی.
- نیاز نیست از تابع friend استفاده کنید، چون شما ::rat را فراموش کردید و این یعنی تابع تعریف مجدد عملگر شما جزئی از کلاس نیست بلکه یک تابع معمولی هست . پس ::rat را اضافه کنید.
- برای عمل ضرب از یک پارامتر استفاده کنید و طرف اول + را از طریق this دریافت کنید.
#include <iostream.h>
class rat
{
public:
rat(int a=0,int b=0){ num=a;den=b;}
rat operator*(const rat&);
private:
int num,den ;
};
rat rat::operator*(const rat& y)
{
rat z(this->num * y.num , this->den * y.den);
return z;
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.