C++ 重载操作符
2023-03-07 09:13:38 时间
C++ 几乎可以重载全部的运算符,而且只能够重载C++中已经有的。
· 不能重载的运算符:“.”、“.*”、“::”、“?:” · 重载之后运算符的优先级和结合性都不会改变。
可以重载为类的非静态成员函数; 可以重载为非成员函数。
重载单目运算符,前置的单目运算符不需要提供形参。如 ++ -- *= +=
...
而后置的单目运算符是需要提供参数来区别前置(为了重载)的。
class Even{
int number=0;
public:
A & operator ++ (){
number +=2;
return *this;
}
A operator ++ ( int ){
int old = number;
++(number);
return old;
}
}
前置++ 返回的是左值,而后置++ 返回的只是一个右值。
重载双目运算符,需要提供一个形参。如 + - * % /
...
class Matrix{
int ** elements;
int sizeX;
int sizeY;
public:
Matrix & operator + ( const Matrix & m ) const{
int newX = m.getX() > this.sizeX ? m.getX() : this.sizeX;
int newY = m.getY() > this.sizeY ? m.getY() : this.sizeY;
Matrix _new(newX,newY);
for( int i = 0; i< newX; i++ ){
for( int j =0; j< newY; j++ ){
_new[i][j] = m[i][j] + elements[i][j];
}
}
return _new;
}
}
重载为非成员函数
当需要对当前程序没有权限的类型进行操作符重载的时候,或是将不同类型重载到一起运算,都需要进行非成员函数重载。
重载时需要从左至右依次声明参与预算的各个参数
这个时候可以理解为以重载的形式写的常规函数。
非成员函数的重载操作符参数,不能全为普通类型。
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的