博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运算符重载入门技术推演
阅读量:4212 次
发布时间:2019-05-26

本文共 1872 字,大约阅读时间需要 6 分钟。

什么是运算符重载

所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。

 

运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大 家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整数、单精度数和双精度数的加法操作过程是很不相同的, 但由于C++已经对运算符”+”进行了重载,所以就能适用于int, float, doUble类型的运算。

 

又如”<<“是C++的位运算中的位移运算符(左移),但在输出操作中又是与流对 象cout 配合使用的流插入运算符,”>>“也是位移运算符(右移),但在输入操作中又是与流对象 cin 配合使用的流提取运算符。这就是运算符重载(operator overloading)。C++系统对”<<“和”>>“进行了重载,用户在不同的场合下使用它们时,作用是不同 的。对”<<“和”>>“的重载处理是放在头文件stream中的。因此,如果要在程序中用”<< “和”>>”作流插入运算符和流提取运算符,必须在本文件模块中包含头文件stream(当然还应当包括”using namespace std“)。

现在要讨论的问题是:用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。?

 

运算符重载入门技术推演

1为什么会用运算符重载机制

        用复数类举例

//Complex c3 = c1 + c2;

//原因 Complex是用户自定义类型,编译器根本不知道如何进行加减

        //编译器给提供了一种机制,让用户自己去完成,自定义类型的加减操作。。。。。

        //这个机制就是运算符重载机制

2 运算符重载的本质是一个函数。

代码如下所示,注意看注释:

#include
using namespace std;class Complex{public: int a; int b;public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } void printCom() { cout << a << " + " << b << " i" << endl; } };//1 定义了全局函数Complex myAdd(Complex& c1, Complex& c2){ Complex tmp(c1.a+c2.a,c1.b+c2.b); return tmp;}//2 函数名重载Complex operator+(Complex& c1, Complex& c2){ cout << "12345上山打老虎" << endl; Complex tmp(c1.a+c2.a,c1.b+c2.b); return tmp;}void main1(){ int a = 0, b = 0; int c; c = a + b; //1 基础数据类型 编译器已经知道了. 如何运算 // a + bi 复数运算规则 Complex c1(1, 2), c2(3, 4); Complex c3; //2 类 也是一种数据类型 用户自定义数据类型 C++编译器 是不知道如何进行运算 //c3 = c1 + c2 ; //c1--; --c1 //3 c++编译器应该给我们程序员提供一种机制 ... //让自定义数据类型 有机会 进行 运算符操作 ====> 运算符重载机制 //4 运算符重载机制 //步骤1 //Complex c4 = myAdd(c1, c2); //c4.printCom(); //输出4 + 6 i //步骤2 //Complex c4 = c1 + c2; //注意这里用的也是操作符重载 //c4.printCom(); //输出: 12345上山打老虎 // 4 + 6 i //步骤3 Complex c4 = operator+(c1, c2); c4.printCom(); //输出: 12345上山打老虎 // 4 + 6 i //总结: 1 运算符重载的本质 是 函数调用 cout << "hello..." << endl; system("pause"); return;}

 

转载地址:http://hezmi.baihongyu.com/

你可能感兴趣的文章
mysql中的 skip-name-resolve 问题
查看>>
删除最后一次的备份文件vbs
查看>>
vbs 实现压缩文件夹为zip文件
查看>>
在VBS中,SET的用法
查看>>
组策略合理限制VBS文件
查看>>
VBS不支持跨盘操作
查看>>
MySQl备份恢复策略(完全+增量备份策略)
查看>>
VBS发送邮件
查看>>
锁的兼容性
查看>>
解决mysqldump备份报错:SET OPTION SQL_QUOTE_SHOW_CREATE=1
查看>>
mysqldump参数详细说明
查看>>
mysqldump备份及结合binlog日志恢复的全过程
查看>>
SQL Server 查找占用CUP内存的SQL
查看>>
ms sql server缓存清除与内存释放
查看>>
怎样使用命令来结束进程
查看>>
三款免费实用的本地文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance)
查看>>
查找库中某个表的字段情况
查看>>
CREATE TABLE A LIKE B
查看>>
bs调用另一个vbs的函数
查看>>
mysql的“Got error 28 from storage engine”错误
查看>>