C++运算符重载(5) 重载== explicit避免隐式转换
来源:互联网 发布:java技术交流论坛 编辑:程序博客网 时间:2024/06/07 03:04
有的时候程序中存在隐藏式转换
比如下面这个例子
#include<iostream>using namespace std;class myComplex {private:int real; //复数的实部int image; //复数的虚部public:myComplex(int real = 0, int image = 0) {this->real = real;this->image = image;}friend bool operator == (const myComplex &obj1, const myComplex &obj2);};bool operator == (const myComplex &obj1, const myComplex &obj2) {if (obj1.real == obj2.real && obj1.image == obj2.image)return true;return false;}int main() {myComplex TestA(3,0);myComplex TestB(10,0);if (TestA == 3) {cout << "SAME" << endl;}else {cout << "NOT SAME" << endl;}system("PAUSE");return 0;
我们通过重载操作符 == 来判断两个自定义的类:复数是否相等
myComplex(int real = 0, int image = 0)在构造函数中,我们给形参定义了默认值 所以在生成对象时 如果不指定形参 便会使用默认值
C++中,如果构造函数可以只传入一个参数来调用,则会发生隐式转换
if (TestA == 3)在上面行代码中 将3传入重载操作符函数 构造函数便会构造一个3,0的myComplex对象,这便发生了隐式转换(将int型转为myComplex型)
我们可以通过使用explicit来避免隐式转换
explicit myComplex(int real = 0, int image = 0) {this->real = real;this->image = image;}
这时必须指明类型
myComplex TestA(3,0);myComplex TestB(10,0);if (TestA == (myComplex)3) { //必须指明类型cout << "SAME" << endl;}else {cout << "NOT SAME" << endl;}
阅读全文
0 0
- C++运算符重载(5) 重载== explicit避免隐式转换
- C++:重载运算符避免数组越界
- 通过重载避免隐式类型转换
- C#==>运算符重载
- 重载=运算符
- +=运算符重载
- 重载“=”运算符
- 重载运算符=
- C++运算符重载(5) - explicit关键字的使用
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- 行锁 表锁 页锁 悲观锁 乐观锁
- epoll版本的http服务器
- Hibernate一对多与多对一映射
- 项目用例图及数据流图
- 原型模式
- C++运算符重载(5) 重载== explicit避免隐式转换
- 仿百度联想搜索框
- 知识体系路线
- 在List的add方法添加对象时都是最后的一条记录的重复
- gulp基础使用
- 关于静态绑定与动态绑定的辨别笔记----C++学习之路
- C++学习笔记(二)
- 好书推荐
- GDB配置(打印STL容器、VS code配置、远程调试debug)