需要注意的地方:
写一个比较简单的例子:
#include<iostream>
#include<ostream>
using namespace std;
class A
{
public:
int a;
int b;
A(int _a = 0 , int _b = 0):a(_a),b(_b){}
A& operator = (const A &_a)
{
a = _a.a;
b = _a.b;
return *this;
}
//++i
A& operator ++()
{
++a;
++b;
return *this;
}
//i++
A operator ++(int)
{
A temp = *this;
a++;
b++;
return temp;
}
//注意这里不是返回的引用,因为如果使用引用用来返回,将得到的相当于++i了,比如:
/*
A& operator ++(int)
{
A& temp = *this;
a++;
b++;
return temp;
}
*/
friend A operator + (const A &_a , const A &_b);
friend A operator - (const A &_a , const A &_b);
friend A operator * (const A &_a , const A &_b);
friend A operator / (const A &_a , const A &_b);
friend istream& operator >> (istream &input,A& _a);
friend ostream& operator << (ostream &output,A& _a);
};
istream& operator >> (istream &input,A& _a)
{
input>>_a.a >>_a.b;
return input;
}
ostream& operator << (ostream &output,A& _a)
{
output<<"a = "<<_a.a <<", b = "<< _a.b << endl;
return output;
}
A operator + (const A &_a , const A &_b)
{
A result = A(0,0);
result.a = _a.a + _b.a;
result.b = _a.b + _b.b;
return result;
}
A operator - (const A &_a , const A &_b)
{
A result = A(0,0);
result.a = _a.a - _b.a;
result.b = _a.b - _b.b;
return result;
}
A operator * (const A &_a , const A &_b)
{
A result = A(0,0);
result.a = _a.a * _b.a;
result.b = _a.b * _b.b;
return result;
}
A operator / (const A &_a , const A &_b)
{
A result = A(0,0);
result.a = _a.a / _b.a;
result.b = _a.b / _b.b;
return result;
}
int main()
{
A _a = A(2,4);
A _b = A(1,2);
A _c ;
cin >> _c;
cout <<"_c : "<< _c <<"\n";
cout <<"++ _c : "<< ++_c <<"\n";
cout <<"_c ++ : "<< _c++ <<"\n";
cout <<"_c : "<< _c <<"\n";
cout <<"_a + _b : "<<_a + _b<<"\n";
cout <<"_a - _b : "<<_a - _b<<"\n";
cout <<"_a * _b : "<<_a * _b<<"\n";
cout <<"_a / _b : "<<_a / _b<<"\n";
return 0;
}
可以重载的操作符:
不可以重载的操作符: