c++运算符重载
一、前言
重载运算符的目的是为了让c++代码变的更直观、易读,主要在类中定义,让我们的类对象有着和普通变量一样的操作,例如:“<<”输出运算符,我们也希望类对象可以使用它,直接输出一些有用信息,这个时候就可以使用运算符重载。
二、运算符重载的规则
(1):运算符重载,不可改变运算顺序和优先级。但是参数和返回类型都可以重新说明的,重载的形式:
返回类型 operator 运算符号(参数列表)
(2):运算符重载中,如果参数均为内部类型,不可重载,例如:
int * operator + (int,int *);
既不可以:
int a=5;
int * pa=& a;
pa=pa+a; //error
(3):c++还规定,“.”“::””.*““.->”“?:”这五个运算符不可以重载。
三、重载形式
(1):类的成员函数
(2):类的友元函数
注意:
当运算符重载为成员函数的时候,函数参数比原操作数少一个,友元函数时,参数个数和原操作数一个样。原因是因为成员函数可以直接访问该成员函数所在类的私有数据成员,少的那个参数就是该类自己。因为友元函数对某个对象的数据进行操作,就必须通过该对象的名称来进行,因此使用到的参数都要进行传递,操作数的个数就不会有变化。
四、重载为友元函数
前也说了,友元函数是没有this指针的,所以在双目运算符中需要两个参数,在单目运算符是只需要一个运算符即可。
#include<iostream>
using namespace std;
class A
{
private:
int a;
public:
A(int a)
{
this->a = a;
}
friend A operator +(A&, A&); //重载“+”
friend A& operator ++(A&); //重载“++”
friend ostream & operator << (ostream &,const A &);//重载“<<”
};
A operator + (A & a , A & a1)
{
int p = a.a + a1.a;
A res(p);
return res;
}
A & operator ++(A & a)
{
a.a++;
return a;
}
ostream & operator <<(ostream & cout,const A & a)
{
cout << a.a << endl;
return cout;
}
int main()
{
A a(10);
cout << a << endl; //输出a中的a
A a1(100);
cout << a1 << endl; //输出a1中的a
A and = a + a1; //加法
cout << and << endl;
a++; //自增
cout << a << endl;
system("pause");
return 0;
}
输出结果:
五、重载为成员函数
#include<iostream>
using namespace std;
class A
{
private:
int a;
public:
A(int a)
{
this->a = a;
}
A operator +(A & c) //重载“+”
{
int p = c.a + a;
A r(p);
return r;
}
A& operator ++() //重载“++”
{
a++;
return * this;
}
void operator << (ostream &cout)//重载“<<”
{
cout << a << endl;
}
};
int main()
{
A a(10);
a << cout; //输出a中的a
A a1(100);
a1 << cout; //输出a1中的a
A and = a + a1; //加法
and << cout;
a++; //自增
a << cout; //这种输出形式已经改变了,相当于调用成员函数一样,所以声明为友元函数比较好。
system("pause");
return 0;
}
输出结果:
注意:c++规定:“=”“()”“[]”“->”必须为成员函数重载。
六、运算符重载函数的格式
参考博客
还没有评论,来说两句吧...