معرفی
اضافه بار اپراتور یکی از بهترین ویژگی های C++ است. با بارگذاری بیش از حد عملگرها، میتوانیم به عملگرهایی مانند +,-,*,<=,>= و غیره که به طور پیشفرض فقط روی انواع دادههای استاندارد مانند int، float و غیره کار میکنند، معنای بیشتری بدهیم.
اپراتورهایی که نمی توانند بیش از حد بارگذاری شوند عبارتند از ., ::, ? و : .
در اینجا، ما یک کلاس ساده ایجاد کردیم که نام آن xy برای بارگذاری بیش از حد اپراتور است. ما دو متغیر int x,y ایجاد کردیم تا تمام عملیات ویژگی های بارگذاری بیش از حد اپراتور در C++ را آزمایش کنیم.
- #include
- #include
- class xy
- {
- private:
- int x,y;
- public:
- // ======constructors=========
- xy()
- { x=y=0; }
- xy(int i,int j)
- {x=i;y=j;}
- xy(xy &z)
- {x=z.x;y=z.y;}
- // ====== unary operators ========
- xy operator-();
- xy operator++();
- xy operator–();
- xy operator++(int);
- xy operator–(int);
- //======= binary operators ========
- xy operator+(xy &);
- xy operator-(xy &);
- xy operator*(xy &);
- xy operator/(xy &);
- xy operator%(xy &);
- xy operator=(xy &);
- xy operator+=(xy &);
- xy operator-=(xy &);
- xy operator*=(xy &);
- xy operator/=(xy &);
- xy operator%=(xy &);
- // =======comparison or logical operators============
- int operator<(xy &);
- int operator>(xy &);
- int operator==(xy &);
- int operator!=(xy &);
- int operator<=(xy &);
- int operator>=(xy &);
- //========= inseration and extraction operators ==========
- friend ostream&operator<<(ostream&, xy&);
- friend istream&operator>>(istream&, xy&);
- };
سپس بدنه ای از تمام توابع ایجاد کردیم و تابعی را در توابع یک برنامه ++C فراخوانی کردیم.
- //Function operator-() for return absolute value.
- xy xy::operator-()
- {
- if(x<0){x*=-1;}
- if(y<0){y*=-1;}
- return *this;
- }
- //Function of unary operators.
- xy xy::operator++()
- {
- ++x;++y;
- return *this;
- }
- xy xy::operator–()
- {
- –x;–y;
- return *this;
- }
- xy xy::operator++(int)
- {
- x++;y++;
- return *this;
- }
- xy xy::operator–(int)
- {
- x–;y–;
- return *this;
- }
- //Function of binary operators.
- xy xy::operator+(xy &z)
- {
- xy t;
- t.x=x+z.x;
- t.y=y+z.y;
- return t;
- }
- xy xy::operator-(xy &z)
- {
- xy t;
- t.x=x-z.x;
- t.y=y-z.y;
- return t;
- }
- xy xy::operator*(xy &z)
- {
- xy t;
- t.x=x*z.x;
- t.y=y*z.y;
- return t;
- }
- xy xy::operator=(xy &z)
- {
- x=z.x;y=z.y;
- return *this;
- }
- xy xy::operator/(xy &z)
- {
- xy t;
- t.x=x/z.x;
- t.y=y/z.y;
- return t;
- }
- xy xy::operator%(xy &z)
- {
- xy t;
- t.x=x%z.x;
- t.y=y%z.y;
- return t;
- }
- xy xy::operator+=(xy &z)
- {
- xy t;
- t.x=x+z.x;
- t.y=y+z.y;
- return t;
- }
- xy xy::operator-=(xy &z)
- {
- xy t;
- t.x=x-z.x;
- t.y=y-z.y;
- return t;
- }
- xy xy::operator*=(xy &z)
- {
- xy t;
- t.x=x*z.x;
- t.y=y*z.y;
- return t;
- }
- xy xy::operator/=(xy &z)
- {
- xy t;
- t.x=x/z.x;
- t.y=y/z.y;
- return t;
- }
- xy xy::operator%=(xy &z)
- {
- xy t;
- t.x=x%z.x;
- t.y=y%z.y;
- return t;
- }
- //Function of insertion(>>) & extraction(<<) operators.
- ostream&operator<<(ostream &o, xy &z)
- {
- o<<endl<<"(x: "</endl<<<<z.x<<< span="">",y: "<<z.y<<< span="">")"; </z.y<<<></z.x<<<>
- return o;
- }
- istream&operator>>(istream &i, xy &z)
- {
- cout<<endl<<"Enter X & Y: "</endl<<;
- i>>z.x>>z.y;
- return i;
- }
- //main program to call some overloaded operators.
- void main()
- {
- clrscr();
- xy a,b(10,20),c;
- cin>>a;
- cout<<a<<b; < span=""></a<<b; <>
- cout<<endl<<"a+b:"</endl<<;
- c=a+b;
- cout<<c; < span=""></c; <>
- cout<<endl<<"a-b:"</endl<<;
- c=a-b;
- cout<<c; < span=""></c; <>
- cout<<endl<<"a*b:"</endl<<;
- c=a*b;
- cout<<c; < span=""></c; <>
- cout<<endl<<"a/b:"</endl<<;
- c=a/b;
- cout<<c; < span=""></c; <>
- cout<<endl<<"a%b:"</endl<<;
- c=a%b;
- cout<<c; < span=""></c; <>
- cout<<endl<<"c+=b:"</endl<<;
- c=c+=b;
- cout<<c; < span=""></c; <>
- getch();
- }
خروجی
طرح داخلی تابع فراخوانی c=a.operator+(b) است. اما C++ ویژگیهای کاربرپسند بارگذاری بیش از حد اپراتور را ارائه میدهد، بنابراین طرحبندی فراخوانی ما مانند عملیات پیشفرض انواع دادههای معمولی c=a+b است. امیدوارم بارگذاری بیش از حد اپراتور برای دانش آموزان و مبتدیان برای درک اصول اولیه برنامه نویسی شی گرا مفید باشد.