4.0 C++远征:重载运算符
目录
- 重载运算符
- 四、重载运算符
- 1.一元运算符重载
- 2.二元运算符重载
- 四、重载运算符
重载运算符
四、重载运算符
概念
: 给原有运算符赋予新功能。
本质
: 函数重载。
关键字
: operator
1.一元运算符重载
符号只与一个操作数进行运算。
Ⅰ -(负号)的重载(取反啊)
友元函数重载
// Coordinate.hpp class Coordinate { friend Coordinate& operator-(Coordinate &coor);public:Coordinate(int x, int y);private:int m_iX;int m_iY; };// Coordinate.cpp Coordinate& Coordinate::operator-(Coordinate &coor) {coor.m_iX = -coor.m_iX;coor.m_iY = -coor.m_iY;return *this; }// main.cpp int main() {Coordinate coor(3, 5);-coor; // operator-(coor);return 0; }
成员函数重载
// Coordinate.hpp class Coordinate {public:Coordinate(int x, int y);Coordinate& operator-(); // 有this指针private:int m_iX;int m_iY; };// Coordinate.cpp Coordinate& Coordinate::operator-() {m_iX = -m_iX;m_iY = -m_iY;return *this; }// main.cpp int main() {Coordinate coor(3, 5);-coor; // coor.operator-();return 0; }
Ⅱ ++符号的重载
前置++符号重载
// Coordinate.hpp class Coordinate {public:Coordinate(int x, int y);Coordinate& operator++(); // 前置++private:int m_iX;int m_iY; };// Coordinate.cpp Coordinate& Coordinate::operator++() {m_iX++;m_iY++;return *this; }// main.cpp int main() {Coordinate coor(3, 5);++coor; // coor.operator++();return 0; }
后置++符号重载
// Coordinate.hpp class Coordinate {public:Coordinate(int x, int y);Coordinate operator++(int); // 后置++(int用来标识当前的++是后置重载,并不接受任何入参)private:int m_iX;int m_iY; };// Coordinate.cpp Coordinate Coordinate::operator++(int) {Coordinate oldCoor(*this);m_iX++;m_iY++;return oldCoor; }// main.cpp int main() {Coordinate coor(3, 5);coor++; // coor.operator++(0);return 0; }
2.二元运算符重载
符号与两个个操作数进行运算。
Ⅰ +(加号)的重载
友元函数重载
// Coordinate.hpp class Coordinate {friend Coordinate operator+(const Coordinate &coor1, const Coordinate &coor2);public:Coordinate(int x, int y);private:int m_iX;int m_iY; };// Coordinate.cpp Coordinate operator+(const Coordinate &coor1, const Coordinate &coor2) {Coordinate tempCoor;tempCoor.m_iX = coor1.m_iX + coor2.m_iX;tempCoor.m_iY = coor1.m_iY + coor2.m_iY;return tempCoor; }// main.cpp int main() {Coordinate coor1(3, 5);Coordinate coor2(4, 6);Coordinate coor3(0, 0);coor3 = coor1 + coor2; // coor3 = operator+(coor1, coor2);return 0; }
成员函数重载
// Coordinate.hpp class Coordinate {public:Coordinate(int x, int y);Coordinate operator+(const Coordinate &coor);private:int m_iX;int m_iY; };// Coordinate.cpp Coordinate operator+(const Coordinate &coor) {Coordinate tempCoor;tempCoor.m_iX = this->m_iX + coor.m_iX;tempCoor.m_iY = this->m_iY + coor.m_iY;return tempCoor; }// main.cpp int main() {Coordinate coor1(3, 5);Coordinate coor2(4, 6);Coordinate coor3(0, 0);coor3 = coor1 + coor2; // coor3 = coor1.operator+(coor2);return 0; }
Ⅱ <<号的重载
友元函数重载
// Coordinate.hpp #include <ostream> using namespace std; class Coordinate {friend ostream &operator<<(ostream &output, const Coordinate &coor);public:Coordinate(int x, int y);private:int m_iX;int m_iY; };// Coordinate.cpp ostream &operator<<(ostream &output, const Coordinate &coor) {output << coor.m_iX << ", " << coor.m_iY << endl;return output; }// main.cpp int main() {Coordinate coor(3, 5);cout << coor; // operator<<(cout, coor);return 0; }
输出运算符可以采用成员函数重载吗?
不可以。
因为重载输出运算符的第一个参数必须是ostream &out,而若写成成员函数必须是this指针。
Ⅲ [](索引)的重载
// Coordinate.hpp
class Coordinate {public:Coordinate(int x, int y); int operator[](int index);private:int m_iX;int m_iY;
};// Coordinate.cpp
int operator[](int index) {if(index == 0)return m_iX;if(index == 1)return m_iY;
}// main.cpp
int main() {Coordinate coor(3, 5);cout << coor[0]; // coor.operator[](0);cout << coor[1]; // coor.operator[](1);return 0;
}
索引运算符可以采用友元函数重载吗?
不可以。
因为索引运算符的第一个参数必须是this指针。
转载于:https://www.cnblogs.com/xiaoqingyang/p/6077603.html
4.0 C++远征:重载运算符相关推荐
- C++ 重载运算符简单举例
我们可以重定义或重载大部分 C++ 内置的运算符.这样,就能使用自定义类型的运算符. 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的.与其他函数一 ...
- 【C++】重载运算符(一)
1.1 重载运算符特点 重载运算符本质上是一次函数调用 除了operator() 运算符调用外,其他重载运算符不能含有默认参数. 当重载的运算符是成员函数时,this绑定到左侧运算对象.成员运算符函数 ...
- C++中自定义比较函数和重载运算符总结
sort 自定义比较函数 //示例 struct node{int x, y; };bool cmp(const node& a, const node& b){return a.x ...
- 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...
- C++——重载运算符和重载函数
重载运算符和重载函数 C++ 中的函数重载 C++ 中的运算符重载 C++ 一元运算符重载 C++ 二元运算符重载 C++ 关系运算符重载 C++ 输入/输出运算符重载 C++ 赋值运算符重载 C++ ...
- [YTU]_2442( C++习题 矩阵求和--重载运算符)
题目描述 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+",使之能用于矩阵相加(如c=a+b). 重载流插入运算符"<<"和流提取运 ...
- [YTU]_2440( C++习题 复数类--重载运算符+,-,*,/)
题目描述 定义一个复数类Complex,重载运算符"+","-","*","/",使之能用于复数的加.减.乘.除.运算符 ...
- [YTU]_2441( C++习题 复数类--重载运算符2+)
题目描述 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意.例如,c1+c2,i+c1 ...
- [YTU]_2439( C++习题 复数类--重载运算符+)
题目描述 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.将运算符函数重载为非成员.非友元的普通函数.编写程序,求两个复数之和. 输入 两个复数 输出 复 ...
最新文章
- 计算机组成原理 — 总线系统
- levelDB数据库使用及实例 - 高性能nosql存储数据库
- python dict常用操作
- oracle主键跟踪,Oracle根据主键查找外键
- LeetCode Algorithm 274. H 指数
- 为什么修改了ie级别里的activex控件为启用后,还是无法下载,显示还是ie级别设置太高?
- 财付通php接口,dedecms 财付通接口,dedecms财付通_PHP教程
- 特征筛选5——距离相关系数筛选特征(单变量筛选)
- π型滤波频率计算_一文看懂π型滤波电路原理
- Linux基本命令 帮助命令
- 雅虎JavaScript架构师:网页开发技术安全优先
- gcc详解以及静态,动态库的生成 2
- Android Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
- js判断文件后缀名方法
- 使用Dreamweaver进行一个简单的图文混排1/HTML
- android 脚本不被杀死,fgo用自动刷脚本会不会封号无需安卓
- 土木工程考研和计算机考研哪个,土木工程考研还是就业
- Unity 中 print 和 Debug.Log 的区别
- Python算法题笔记
- 2018中国人工智能企业排行(前50)