C++_运算符重载
2015-06-27 18:04
274 查看
一、语法
运算符相当于一个函数,重载运算符类似于重载一个函数,函数具有返回值和参数列表,同理运算符也有,所以重载一个运算符应为
其中
返回类型可以为任意的类型, 一般返回该类
operator是表明重载的是一个运算符
@表示可以被重载的运算符,包括
+ - / * % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= >>>>= <<= == != <= >= new new[] delete delete[]
参数列表为参与运算的类
二、重载方式
1、非静态成员运算符重载
用这种方式重载所需要的参数比运算符实际所需要的参数少一个,该参数为其本身,通过this指针来传递
2、友元或普通函数方式重载运算符
如果将运算符函数作为类的友元重载,它需要的参数个数就与运算符实际需要的参数个数相同。
三、注意事项
1、重载++,–等有前缀或后缀运算符
①重载前自增自减是,直接运算,返回运算后的结果。重载后自增自减时,先新建一个对象,对原对象进行备份,再对元对象进行自加运算,返回值为新建对象
②区分方法
2、重载=运算符
当类内存在指针时,不能令两个指针直接相等,要重新申请一个和他大小相等的内存,然后内存中的内容拷贝到新内存中。否则将会产生指针悬挂问题
3、重载[]运算符
①[]运算符是一个二元运算符,第一个参数为this,第二个是下标。
②[ ]只能被重载为类的非静态成员函数,不能被重载为友元和普通函数。
四、重载流插入>>与流提取<<运算符
1、这两个运算符只能以友员的形式重载
语法
运算符相当于一个函数,重载运算符类似于重载一个函数,函数具有返回值和参数列表,同理运算符也有,所以重载一个运算符应为
返回类型 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++ 继承相关注意点
- C++ string 用法详解
- C++面试必备,概念解析
- const 修饰函数参数,返回值,函数体
- C++ 移位运算 浅析
- 标准C++中的string类的用法总结
- crypto++ 中DES AES RC5 RC6 TEA XTEA XXTEA加密算法性能比较
- Effective C++ 条款24
- Date and Time in C++
- C++学习笔记2——引用
- c++中 dialog、bitmap等资源,由一个项目完全复制到另一个项目的方法
- 一点对C语言中跳过scanf语句的理解
- C++经典面试题(十)
- C语言实现封装
- C++学习笔记1——const
- 黑马程序员——C语言之格式化输出与字符串操作
- C++ string 与 int 等类型 的相互转换
- Sort()函数是c++一
- C语言按行读文件及字符串分割
- 第16章 C++标准模板库STL