C++重载运算符简单总结
2015-07-02 17:17
337 查看
当运算符作用于类类型的运算对象时,可以通过运算符重载重新定义该运算符的含义。明智的使用运算符重载能令我们的程序更易于编写和阅读。
一、基本概念
什么是运算符重载?
重载的运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后要定义的运算符共同组成。
重载运算符的方式有哪些?
一般可以通过类成员函数、友元函数或者是类外的普通函数重载运算符。
二、规则
不能重载的运算符有:. .* :: 和 sizeof
友元函数和成员函数的使用场合:
一般情况下,建议一元运算符元使用成员函数重载,二元运算符使用友元函数重载
a. 运算符的操作需要修改类对象的状态,则使用成员函数。比如需要做左值操作数的运算符(=, +=, -=)
b. 运算时,有数和对象的混合运算时,必须使用友元函数
c. 二元运算符中,第一个操作数位非对象时,必须使用友元函数。如 << 和 >>
具体规则见下表:
三、注意
一般情况下(除了函数调用操作符),重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。一元运算符有一个参数,二元运算符有两个参数。对于二元运算符来说,左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数。
除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。
当一个重载的运算符是成员函数时,this 绑定到左侧运算对象。所以成员运算符函数的(显式)参数数量比运算对象的数量少一个。
对于一个运算函数来说,它或者是类的成员,或者至少含有一个类类型的参数:
一、基本概念
什么是运算符重载?
重载的运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后要定义的运算符共同组成。
重载运算符的方式有哪些?
一般可以通过类成员函数、友元函数或者是类外的普通函数重载运算符。
二、规则
不能重载的运算符有:. .* :: 和 sizeof
友元函数和成员函数的使用场合:
一般情况下,建议一元运算符元使用成员函数重载,二元运算符使用友元函数重载
a. 运算符的操作需要修改类对象的状态,则使用成员函数。比如需要做左值操作数的运算符(=, +=, -=)
b. 运算时,有数和对象的混合运算时,必须使用友元函数
c. 二元运算符中,第一个操作数位非对象时,必须使用友元函数。如 << 和 >>
具体规则见下表:
运算符 | 建议使用 |
所有一元运算符 | 成员函数 |
= () [] -> | 必须是成员函数 |
+= -= /= *= ^= &= != %= >>= <<= | 成员函数 |
所有其他的二元运算符 | 友元函数 |
<< >> | 必须友元函数 |
一般情况下(除了函数调用操作符),重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。一元运算符有一个参数,二元运算符有两个参数。对于二元运算符来说,左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数。
除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。
当一个重载的运算符是成员函数时,this 绑定到左侧运算对象。所以成员运算符函数的(显式)参数数量比运算对象的数量少一个。
对于一个运算函数来说,它或者是类的成员,或者至少含有一个类类型的参数:
//错误:不能为int重定义内置的运算符 int operator+(int ,int);
相关文章推荐
- C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)
- [leetcode-73]Set Matrix Zeroes(C语言)
- c++ 单词转换 map对象
- C/C++ 获取文件中有效行的数量
- C/C++相对论——C++中为什么要使用异常?
- 用指向指针的指针的方法对字符串和整数排序
- vc++读写ini文件
- c++复习
- 编译frostwire项目jlibtorrent_jni.cpp
- c++ 哪些自定义的数据类型
- C++ 怎么获得当前操作系统的语言,是英文版本还是简体或繁体
- C++中cout和cerr的区别?
- C++中class和struct的区别
- 浅谈树链剖分(C++、算法、树结构)
- C++字符串操作二
- 类中的构造函数与析构函数、函数重载以及this指针的总结
- C/C++ 快速排序 quickSort
- c++正则表达式日期格式匹配
- C++:STL标准入门汇总
- C语言中关于进程的函数