| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 运算符重载 -> 正文阅读 |
|
[C++知识库]运算符重载 |
一、运算符重载的基本概念我们知道C++预定义的运算符,只能用于基本数据类型的运算 如:整型,实型,字符型,逻辑型....... 运算符如:+、-、*、/、%、&、~、!、|、=、<<、>>、!=、..... 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。 运算符重载的目的是:扩展C++中提供的运算符的适用范围,使之能作用于对象。 二、运算符重载的形式1、运算符重载的实质是函数重载 2、可以重载为普通函数,也可以重载为成员函数 3、把含运算符重载的表达式转换成为对运算符函数的调用 4、把运算符的操作数转换成运算符函数的参数 5、运算符被多次重载时,根据实参的类型决定调用哪个运算符函数 运算符重载的形式
下面举一个重载的例子 定义一个复数对象重载运算符+ -
?重载为成员函数时,参数个数为运算符目数减一 ?重载为普通函数时,参数个数为运算符目数 运算符重载-如何决定作为成员函数还是非成员函数对于运算符重载可通过成员函数和非成员函数实现,这二者的区别如下: (1)成员函数运算符重载时,运算符的左值为调用对象,右值为参数对象,举个例子,a,b均是类A的对象,重载“+”实现a+b,可以将其认为是:a对象调用“+”函数,函数的参数为b对象;而在事实上,a对象和b对象都是这个“+”函数的参数,只不过a对象被隐式调用,由this指针所绑定。因此成员函数运算符重载的显式参数比实际运算参数少一个;而在非成员函数运算符重载中,必须将操作数全部显式添加在参数列表中,运算符左值为第一个参数,运算符右值为第二个参数。 (2)成员函数运算符重载时,运算符左值类型必须为所在类类型;而非成员函数运算符重载则不必。 这个时候我们就会有这样的疑问,如何决定运算符重载为成员函数还是非成员函数呢? ?一般来说,对于双目运算符,应当将其重载为非成员函数(友元函数),而对于单目运算符,则应将其重载为成员函数。但这也不是绝对的,双目运算符中,“=”、“[]”、“->”和“()”是必须重载为成员函数的。而"<<"运算符由于其第一个运算符必须是ostream的,所以只能重载为友元函数 三、赋值运算符的重载有时候希望赋值运算符两边的类型可以不匹配,比如把一个int类型的变量赋值给一个Complex对象,或把一个char * 类型的字符串赋值给一个字符串对象,此时就要重载赋值运算符“=” 赋值运算符“=”只能重载为成员函数
? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 2:43:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |