您的位置:首页 > 编程语言 > C语言/C++

C++_运算符重载

2015-06-27 18:04 274 查看
一、语法

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

返回类型  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&);//输入流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: