一、一般运算符重载
运算符重载有两种方式:成员函数和友元函数。成员函数的形式,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。
运算符重载有两种方式:成员函数和友元函数。成员函数的形式,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。
class A
{
public:
A(int d):data(d){}
A operator+(A&); //成员函数
friend AA operator+(A&,A&); //友元函数
private:
int data;
};
//成员函数的形式
A A::operator+(A &a)
{
return A(data+a.data);
}
//友元函数的形式
A operator+(A &a1,A &a2)
{
return A(a1.data+a2.data);
}
}
二、自增减运算符重载
A& operator ++ ();//前置++
A operator ++ (int);//后置++
A& operator --();//前置--
A operator -- (int);//后置--
三、关系运算符重载
关系运算符有==,!=,<,>,<=,>=
如:
关系运算符有==,!=,<,>,<=,>=
如:
bool operator == (const A& );
四、逻辑运算符重载
逻辑运算符有||,&&,!
如:
bool operator || (const A& );
总结:
1、除了类属关系运算符”.“、成员指针运算符”.*“、作用域运算符”::“、长度运算符“sizeof”和三目运算符”?:“以外,C++中的所有运算符都可以重载。
1、除了类属关系运算符”.“、成员指针运算符”.*“、作用域运算符”::“、长度运算符“sizeof”和三目运算符”?:“以外,C++中的所有运算符都可以重载。
2、运算符重载实质上是函数重载。
3、一般说来,单目运算符最好被重载为成员;对双目运算符最好被重载为友元函数,但是,有的双目运算符还是重载为成员函数为好,例如,赋值运算符。因为,它如果被重载为友元函数,将会出现与赋值语义不一致的地方。
4、重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。
5、重载运算符的函数不能有默认的参数。
6、用于类对象的运算符一般必须重载,但是运算符“=”和“&”不必用户重载。