C++类和对象(下)

本文详细讲解了C++中运算符重载的概念,包括比较运算符的重载、输出重载的处理(如cout和友元函数的应用),以及构造函数中初始化列表的重要性,强调了成员变量初始化顺序对代码行为的影响。
摘要由CSDN通过智能技术生成

1.运算符重载问题

运算符重载就是对这个运算符赋予了新的意义,我们的运算符在没有被重载前,只能用于许多自定义类型,但是经过重载后,我们可以用于自定义类型。

首先还是要说明有几个运算符是不能重载的,如.*  ::  sizeof  ? :  .这五种运算符不能重载

下面我们来演示几种经典的运算符重载

如果我想比较d1和d2的大小,在没有重载之前我们是无法进行比较的,因此我们就可以重载一个>符号

对了,还要跟大家说清楚,就是你在重载的时候所有参数的类类型应该都是相同的,就是你不能用两个不同定义的对象去进行运算符重载

我们在设置运算符重载时,我们应该根据实际情况来确定返回值,比如我们在平时可能喜欢写这样的代码

连等式,因为首先是d3赋值给d2,然后再是d2赋值给d1

这是我还没写返回值的样子,我们看,调用这个运算符重载我们需要两个Data类型的对象,那么我们就必须要返回一个Data类型的对象,为了减少拷贝构造,我们可以返回引用

接下来我们来讲一讲<<和>>的重载

首先我们要了解清楚的是我们原来学过的cout和cin分别代表输出和输入,cout是ostream类里面的,而cin是istream类里面的

因为我们的目的是要打印日期中的年月日,所以我就放到类里面进行运算符重载,但是我们发现只能这样

平时我们都是写cout<<d1,但是如果我们把它放到类里面些就只能反过来,为了解决这一问题,我们就不得不运算符重载放到类外面来定义,成为全局函数,但是又面临一个难题,_day是private的,我们在类外面无法直接访问,这时就需要用到我们的友元函数,就是在某个类里声明某个函数是它的朋友,可以访问它的private成员(自己的理解)

至于为什么返回ostream的的引用,跟连等一样,我们经常些cout<<d1<<endl;这样的代码,所以在输出完d1后,我们还需要输出一个换行符,这时候就需要返回一个ostream类型的来继续调用运算符重载。

2.关于构造函数进一步

类里面包含以下成员时,必须要在初始化列表初始化里面初始化

1.引用  2.const对象  3.没有默认构造函数的自定义类型

还有一点就是初始化列表初始化的顺序不是按你写的初始化列表顺序来的,而是按照成员变量谁先声明就先初始化谁,比如说

上面初始化的顺序就是先_year然后_month再_day,那有人会说这个有什么作用,我们再来看一组代码

大家觉得这段代码会输出什么,答案如下图,这就与我们刚刚说的初始化的顺序有关系

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZENG zhi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值