高放的c++学习笔记之重载运算与类型转换
▲基本概念
(1)重载运算符是具有特殊名字的函数,它们的名字又operator和其后要定义的运算符号共同构成。、
(2)对于一个运算符号来说它或者是类的成员,或者至少含有一个类类型的参数。
(3)我们只能重载已有的运算符,而无权发明新的运算符
▲调用重载的运算符函数
类外的重载运算符
a+b等同于operator+(a,b)
类内的重载运算符a+b等同于a.operator+(b);
class gaofang{
public :
int x, y;
int operator+ (gaofang& b)const{
return x+y+b.x+b.y;
}
};
int operator-(gaofang a, gaofang b){
return a.x + a.y - b.x - b.y;
}
int main(){
gaofang a, b;
printf("%d %d\n", a+b, a.operator+(b));
printf("%d %d\n", a-b, operator-(a, b));
return 0;
}
▲重载函数作为成员或非成员
将重载函数在成员函数与非成员函数之间的选择上通常遵循如下几点
(1)赋值(=),下标([]),调用(()),和成员访问箭头(->)运算符必须是成员
(2)复合赋值运算符一般来说应该是成员,但并非必须。
(3)改变对象状态的运算符通常应该是成员。
(4)具有对称性的运算符通常应该定义成非成员函数。
例如
string s = "world";
s = s+"hello"; //正确
s = "hello" + s; //如果+是成员函数,则错误
▲重载输入输出运算符
输入输出运算符必须是非成员函数。
⊙重载输出运算符
通常情况下,输出运算符的第一个形参是一个非常量ostream对象的引用,之所以是非常量是因为向流中写入内容会改变流的状态,引用是因为我们无法直接复制一个ostream对象。
第二个形参一般是一个常量的引用,打印不会改变该对象的内容。
⊙重载输入运算符
与输出运算符不同的是,第二个参数必须是一个非常量的引用,因为是向一个类里面输入。
例子
istream &operator>>(istream &is, gaofang &a){
is >> a.x >> a.y;
return is;
if(!is) a.x = 1, a.y = 0; //当输入错误的时候将a初始化
}
高放的c++学习笔记之重载运算与类型转换的更多相关文章
- 高放的c++学习笔记之类
类的基本思想是数据抽象和封装1.this 成员函数通过一个名为this的额外隐式参数来访问调用它的对象,当我们调用一个函数的时候,用请求该函数的对象的初始化this. 如果某个类的名字为sale,某个 ...
- 高放的c++学习笔记之函数基础
局部变量 函数里面的局部变量有普通的局部变量和局部静态变量两种. 普通局部变量变量就是正常定义在函数体内部的变量,如果返回局部变量的地址,以便于函数调用结束后还继续访问此变量的话,编译器会报warni ...
- 高放的python学习笔记之基本语法
python与c++的不同之处 python的语句块不是用{}括起来的而是冒号后面跟一些与比当前语句多一的tab缩进的语句. 1.定义变量 python的变量类型不需要人为指出,会根据赋值的类型决定此 ...
- 高放的c++学习笔记之模板与泛型编程
函数模板 作用 有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用. 我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独 ...
- 高放的c++学习笔记之关联容器
标准库提供8个关联容器 按关键字有序保存有(红黑树实现) set map multset 关键字可重复出现的set multimap 关键字可重复出现的map 无序保存 哈希实现 unorderre ...
- 高放的c++学习笔记之lambda表达式
lambda表达式:可以让代码看起来更整洁,有些结构简单且用的次数少的函数可以用lambda表达式替代, 通常结构是这样的[捕获列表](参数列表){函数部分} 捕获列表: lambda表达式如果在一个 ...
- Rancher Server HA的高可用部署实验-学习笔记
转载于https://blog.csdn.net/csdn_duomaomao/article/details/78771731 Rancher Server HA的高可用部署实验-学习笔记 一.机器 ...
- CNN学习笔记:卷积运算
CNN学习笔记:卷积运算 边缘检测 卷积 卷积是一种有效提取图片特征的方法.一般用一个正方形卷积核,遍历图片上的每一个像素点.图片与卷积核重合区域内相对应的每一个像素值乘卷积核 .内相对应点的权重,然 ...
- 【c++ Prime 学习笔记】第14章 重载运算与类型转换
14.1 基本概念 重载的运算符是特殊的函数:名字由关键字operator后接要定义的算符共同组成,也有返回类型.参数列表.函数体. 重载运算符函数的参数量与该算符作用的运算对象数量一样多 除重载调用 ...
随机推荐
- 《FPGA零基础入门到精通视频教程》-第001b讲软件的破解
高清视频和配套讲义这里下载 http://www.fpgaw.com/thread-68128-1-1.html 优酷视频地址,不是很清楚
- 【Android】listview优化
http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html http://blog.sina.com.cn/s/blog_5fc933 ...
- 7816的报文结构APDU
命令APDU 包括头和主体(这可以在上面的图中看到).头包括CLA,INS,P1 和P2 域.同T0 协议一样,CLA 和INS 说明了应用的分类和指令.P1 和P2 用来详细说明具体指令,并由每一条 ...
- SQLite for xamarin
原文地址:http://www.codeproject.com/Articles/1097179/SQLite-with-Xamarin-Forms-Step-by-Step-guide SQLite ...
- ehci符合USB2.0,uhci,ohci,
uhci ohci ehci他们都是主机控制器的规格,OHCI主要为非PC系统上以及带有SiShe ALi芯片组的 PC主板上的USB芯片,UHCI大多为Intel和Via主板上的USB控制器 ...
- 【动态规划】XMU 1028 Game Boy Advance
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1028 题目大意: 求01背包最优解的方案.物件数和物件编号. 题目思路: [动态规划] ...
- Letter Combinations of a Phone Number——LeetCode
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- Spice代码阅读一:Spice Client 与 Spice Server 通道建立过程
文件 方法 描述 Application.cpp init_globals() 初始化Log,ssl库,canvas(或opengl canvas)和quic压缩库 Process_cmd_line( ...
- save与 merge与 saveOrUpdate的区别
save()方法很显然是执行保存操作的,如果是对一个新的刚new出来的对象进行保存,自然要使用这个方法了,数据库中没有这个对象. update()如果是对一个已经存在的托管对象进行更新那么肯定是要使用 ...
- iOS常用的开源类库
开发几个常用的开源类库及下载地址: 引用 1.json json编码解码 2.GTMBase64 base64编码解码 3.TouchXML xml解析 4.SFHFKeychainUtils 安全保 ...