c++学习记录(十三)

流插入运算符和流提取运算符的重载

  • cout 是在iostream中定义的,是ostream类的对象,ostream包含在iostream头文件里
  • <<是左移运算符,能用在cout上是因为在iostream中对<<进行了重载
  • 有可能按以下方式重载成ostream类的成员函数
void ostream::operator<<(int n)
{
    ...//输出n的代码
    return;
}
  • cout<<5cout.operator<<(5)
  • cout<<"this"同理
  • 但由于返回值是void不能实现cout<<5<<"this"

- 那么怎么重载使得cout<<5<<"this"成立?

  • 希望返回值还是cout则可以连续
  • 已知coutostream类的对象
ostream & ostream::operator<<(int n)
{
    ...//
    return *this;
}
  • cout<<5<<"this"本质上的函数调用形式为cout.operator<<(5).operator<<("this");

- 示例

  • 要程序输出5hello
class CStudent{
    public:int nAge;
};
int main(){
    CStudent s;
    s.nAge=5;
    cout<<s<<"hello";
    return 0;
}
ostream & operator<<(ostream & o,const CStudent & s)
{
    o<<s.nAge;
    return 0;
}
  • cinistream的对象
  • coutostream的对象

类型转换运算符和自增、自减运算符的重载

- 重载类型转换运算符

  • 每一个类型名其实就是类型转换运算符
#include<iostream>
using namespace std;
class Complex
{
    double real,imag;
    public:
        Complex (double r=0,double i=0):real(r),imag(i){};
        operator double(){
            return real;
         }//重载强制类型转换运算符
};
int main()
{
    Complex c(1.2,3.4);
    cout<<(double)c<<endl;//输出1.2
    double n=2+c;//等价于double n=2+c.operator double()
    cout<<n;//输出3.2
}
  • 重载类型转换运算符时返回值不写,因为类型就是它本身,double返回值类型就是double,没必要写

- 自增、自减运算符的重载

  • 自增运算符++,自减运算符--有前置后置之分
  • 为了区分所重载的是前置运算符函数后置运算符,c++规定
    • 前置运算符作为一元运算符重载

      • 重载为成员函数
        T&operator++(); T&operator--();
      • 重载为全局函数
        T1&operator++(T2); T1&operator--(T2);
    • 后置运算符作为二元运算符重载,多写一个没用的参数
      • 重载为成员函数
        T operator++(int); T operator--(int);
      • 重载为全局函数
        T1 operator++(T2,int); T1 operator--(T2,int);
  • 注意:在没用后置运算符重载而有前置运算符重载的情况下,在vs中obj++也调用前置重载,而dev则令obj++编译出错
  • ++a的返回值类型是a的引用,而a++的返回值是一个临时变量,是a+1之前的值,所以重载时前置和后置的返回值类型不一样

- 运算符重载的注意事项

  • c++不允许定义新的运算符
  • 重载后的运算符含义应符合日常习惯
  • 运算符重载不改变运算的优先级
  • 一下运算符不能被重载..*::?:、sizeof
  • 重载运算符()[]->或者赋值运算符=时,运算符重载函数必须声明为类的成员函数

至此函数的重载内容结束!

原文地址:https://www.cnblogs.com/2002ljy/p/12287352.html

时间: 2024-11-17 17:40:47

c++学习记录(十三)的相关文章

穿上华丽的外衣——CSS之旅(码神学习第二十三天)

穿上华丽的外衣--CSS之旅 码神学习第二十三天 学习过程记录: 1.CSS(Cascading Style Sheets,层叠样式表),为了解决内容与表现分离.样式通常存储在样式表中.外部样式表可以提高工作效率. 2.三种不同类型的CSS样式: 答:①内联样式:直接在html标签上定义该标签的CSS样式 ②内部样式:写在html文件中,且包含在<style></style>代码块中 ③外部样式:通过在html中引用外部css文件来控制样式 元素的优先级,就近原则,离元素最近的规则

java之jvm学习笔记十三(jvm基本结构)

java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成图形,所以只要你有耐心,仔细,认真,并发挥你的想象力,这一章之后你会充满自信.当然,不是说看完本章,就对jvm了解了,jvm要学习的知识实在是非常的多.在你看完本节之后,后续我们还会来学jvm的细节,但是如果你在学习完本节的前提下去学习,再学习其他jvm的细节会事半功倍. 为了让你每一个知识点都有迹

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Windows API 编程学习记录&lt;二&gt;

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr

Python学习记录-2016-11-29

今日学习记录: 心灵鸡汤: 要有合适自己的目标,一个目标一个目标实现,切忌好高骛远: 最好的投资就是投资自己: 实现梦想 学习,学习,再学习: Talk is cheap. 从本身而言,余三十而立之年,从事测试行业7七年有余,一年半华为外包路由器,两年无线wifi测试,一年半网管软件测试,一年自动化测试经理,推行公司自动化测试进程,从开始的TCL,到现在的python,工欲善其事必先利其器,所以自己来学习,总体我认为我的目标是一直前进的,不断变化的,但是方向并没有大的错误,有些累,所以近期有些懈

程序的机械级表示学习记录

程序的机械级表示学习记录 X86的三代寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全. 8086的分段模式. IA32的带保护模式的平坦模式. 对于机械级编程的两种重要抽象 ISA:机械级程序的格式和行为,定义为指令集体系结构,它定义了处理器状态.指令的格式,以及每条指令对状态的影响. 虚拟地址:机器级程序使用的存储器地址,提供的存储器模型看上去是一个非常大的数组.存储器系统的实际实现是将多个硬件存储器和操作系统软件组合起来的. 在GCC中获得汇编代码与反汇编 获得汇编代码:

python 系统地学习记录

由头: python值得一学. 尝试一下写学习记录,看看效果. 1.记录一些不熟悉或者重要的知识点. 2.记录一些遇到的问题,标签 Question. 书:python基础教程(第2版) Chapter 1:基础知识 本章的内容熟悉即可. 比较重要的是字符串,单双引号转义,str,repr... Time 1.5 h  2015.8.31 23:09 版权声明:本文为博主原创文章,未经博主允许不得转载.