C++_运算符重载

一、语法
运算符相当于一个函数,重载运算符类似于重载一个函数,函数具有返回值和参数列表,同理运算符也有,所以重载一个运算符应为

返回类型  operator@(参数表)

其中
返回类型可以为任意的类型, 一般返回该类
operator是表明重载的是一个运算符
@表示可以被重载的运算符,包括
+ - / * % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= >>>>= <<= == != <= >= new new[] delete delete[]
参数列表为参与运算的类

二、重载方式
1、非静态成员运算符重载

class A{
public :
 A operator+(A b){}
 private :
 };

用这种方式重载所需要的参数比运算符实际所需要的参数少一个,该参数为其本身,通过this指针来传递

2、友元或普通函数方式重载运算符

class A{
    friend A operator+(A a,A b); //友元声明
};
A  operator+(A a,A b){……}       //友元定义
A  operator-(A a,A b){……}       //普通函数

如果将运算符函数作为类的友元重载,它需要的参数个数就与运算符实际需要的参数个数相同。

三、注意事项
1、重载++,–等有前缀或后缀运算符
①重载前自增自减是,直接运算,返回运算后的结果。重载后自增自减时,先新建一个对象,对原对象进行备份,再对元对象进行自加运算,返回值为新建对象
②区分方法

    //前缀
    operator ++ ();//类内重载
    operator ++ (X & x);//类外重载
    //后缀
    operator ++ (int);//类内重载
    operator ++ (X & x, int);//类外重载
    //--与之类似

2、重载=运算符
当类内存在指针时,不能令两个指针直接相等,要重新申请一个和他大小相等的内存,然后内存中的内容拷贝到新内存中。否则将会产生指针悬挂问题
3、重载[]运算符
①[]运算符是一个二元运算符,第一个参数为this,第二个是下标。
②[ ]只能被重载为类的非静态成员函数,不能被重载为友元和普通函数。

四、重载流插入>>与流提取<<运算符
1、这两个运算符只能以友员的形式重载
语法

friend inline ostream &operator << (ostream&, A&);//输出流
friend inline istream &operator >> (istream&, A&);//输入流

你可能感兴趣的:(C++)