### 学习《C++ Primer》- 7
Part 7: 重载运算与类型转换(第14章)
// @author: gr
// @date: 2015-01-08
// @email: forgerui@gmail.com
一、重载运算符要求
定义一个运算符,它或者是类的成员,或者至少含有一个类类型的参数。
二、重载输出运算符<<
operator<<一般要返回它的ostream的引用。
ostream &operator<< (ostream& os, const Sales_data& item){
os << item.isbn() << " " << item.units_sold << " " << item.price();
return os;
}
输入输出运算符必须是非成员函数:
因为这两个运算符的做操作数不可能是用户自定义类的对象,而是流类的对象cin、cout等。如果它需要使用类的私有成员变量,可以定义成友元函数。
三、相等运算符
相等运算符会比较对象的每一个数据成员,只有所有对应成员都相等,才认为相等。
四、下标运算符
下标运算符必须是成员函数。
下标运算符一般返回引用,同时定义常量和非常量版本。
五、递增运算符
前置运算符返回递增后的引用:
StrBlobPtr& StrBlobPtr::operator++(){
++count;
return *this;
}
后置运算符返回递增前的原值:
StrBlobPtr StrBlobPtr::operator++(){
//首先记录初值
StrBlobPtr ret = *this;
++count;
return ret;
}
六、函数调用运算符
定义了函数调用运算符就可以像函数一样使用对象。
struct absInt{
int operator(int val) const {
return val < 0 ? -val : val;
}
};
absInt test;
int res = test(-7); //test是对象,而非函数
七、类型转换
class SmallInt{
public:
SmallInt(int i = 0):val(i){
if (i < 0 || i > 255)
throw std::out_of_range("Bad SmallInt value");
}
//将SmallInt转换为int
operator int() const{
return val;
}
private:
std::size_t val;
};
SmallInt si = 4;
//转换为int
si + 3;
### 学习《C++ Primer》- 7的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
- Python学习之路【目录】
本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...
- python学习笔记系列----(八)python常用的标准库
终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...
随机推荐
- Android开发中常用的Eclipse快捷键
关闭所有窗口Ctrl + Shift + W 关闭所有已打开的编辑窗口 重命名Alt + Shift + R 文件或变量重命名(先选中文件或变量再同时按下快捷键) 快速引包Ctrl + Shi ...
- 好的 ASP.Net网站、博客
1.优秀的个人技术博客 http://www.tracefact.net/Asp-Net/
- C++学习笔记(十四):模板
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版.Java中对应的技术称为泛型. 函数模板 ...
- MSSQLSERVER数据库- 配置数据库邮件配置的操作过程
还是第一次发现数据库可以发邮件.查了一下百度,试了一下,发现可以. 1.简单了解数据库邮件的概念和使用的传输协议及系统体系: 数据库邮件是从 SQL Server 数据库引擎中发送电子邮件的企业解决方 ...
- 三、servlet如何配置
生命周期 可以第一次请求时就实例化,也可以web容器启动时就实例化 WebServlet(loadOnStartUp=1) <loadOnStartUp.../> 直接收整型值,越小优先级 ...
- eclipse jetty启动内存溢出
一.eclipse jetty启动内存溢出, 异常信息 Exception in thread "ConfigClientWorker-Default" java.lang.Out ...
- js url传值中文乱码之解决之道
在websphere 中使用的是url=encodeURI(encodeURI(url)); //用了2次encodeURI 测试成功,第一次转换没有尝试, 处理方法一. js 程序代码:url=en ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 LCT
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOn ...
- win7(64bit)python相关环境模块搭建
包括Python,eclipse,jdk,pydev,pip,setuptools,beautifulsoup,pyyaml,nltk,mysqldb的下载安装配置. **************** ...
- IDispatch接口介绍
1. C程序调用时,调用者必须预先知道接口规范(如,参数类型.参数字节长度.参数顺序等).由于不同语言这些规范有所不同,COM未解决不同语言之间调用,提供了IDispatch接口. 2 ...