拓展培训东莞网站建设,网站开发前端好还是后端好,想卖产品怎么推广宣传,全球旅游网站排名作者#xff1a;几冬雪来 时间#xff1a;2023年5月6日 内容#xff1a;C类和对象内容讲解 目录
前言#xff1a;
1.运算符重载#xff08;续#xff09;#xff1a;
2.赋值重载#xff1a;
结尾#xff1a; 前言#xff1a; 在上一篇博客中我们再一次讲解了… 作者几冬雪来 时间2023年5月6日 内容C类和对象内容讲解 目录
前言
1.运算符重载续
2.赋值重载
结尾 前言 在上一篇博客中我们再一次讲解了类和对象的内容并且引入了一个新的重载模式——运算符重载那么今天我们就接着对其进行说明。 1.运算符重载续
在上一篇博客中我们讲解了一个日期类运算符重载的实现也得知了运算符重载的话如果是内置类型的话我们可以不进行书写如果是自定义类型的话我们就要对其进行书写。
我们也进行了日期的比较。
但是并不是所以运算符都是有意义的。
还是以我们的日期类函数为例
比如日期减日期可以算出我们两个日期间隔的天数它是有意义的但是在这里日期加日期就是没有意义的行为了。
而是否要重载运算符取决于这个这个运算符对类有无意义。 类似我们这个代码这两种写法从底层来讲是一样的。
因此在编译器来看我们的第一个代码等价与第二个代码在过程中我们的第一个代码就转换为第二个代码的指令。
但是这个代码是在类的外面的因此我们无法去访问私有和保护。
在这里我们有两种方案一种是友元这是我们后面才需要学习的知识另一种方法则是将其放进类中。 但是在这里我们将代码放入类中的时候代码报错了这是因为在运算符重载的时候我们C中有所规定。
在类中作为类成员函数重载的时候其形参看起来比操作数数目少1因为在类中成员函数的第一个参数为隐藏的this。
且必须有一个参数为类类型也就是自定义类型。 像这种两个都是内置类型的就会发生报错因此至少要有一个自定义类型的。
操作符有几个操作数重载就有几个参数。
因此我们的代码要进行修改。 而在我们学到现在的所有的运算符中有五个运算符不能进行重载操作。 这个知识点一般会出现在选择题当中。
2.赋值重载
接下来我们来讲解赋值重载。 首先在这里我们就要区分一下这两种情况一种是两个对象都存在一种是对另一个对象进行初始化的操作。 在这里我们也可以轻而易举的写出我们的代码但是像这种代码的话有一个不足的点。 在我们的编译器中我们可以在C语言和C中写出这种赋值的代码。
这里的赋值顺序是从右到左进行赋值。
但是在我们上面的赋值重载中因为我们并没有返回值为void。
因此在进行了第一次重载之后我们就没有办法顺利的进行第二次重载了。 因此我们的代码要修改成这个样子返回的是this指针又因为节省空间因此在这里我们还要对其进行引用的操作。
这样我们就是返回的就是d4的一个别名了同时也不用担心出作用域销毁的事情。 因为我们的赋值重载和拷贝构造一样所以我们可以让编译器自己帮我们创建。
如果是栈的话就需要我们自己去创建。
这里还要了解的一个点是
赋值运算符只能重载类型成员不能重载全局函数。
默认成员函数不能写到全局。
同时我们的声明和定义也可以进行分离。 这里就是我们的日期类小于形的代码的声明和定义的分离。
但是我们的日期类可用的操作符远不止小于这一个操作符。
类似大于减号等于等操作符都可以用在日期类中。
我们这里可以像上面的代码一样各自书写一个大于等于的代码出来。但是这样做的话就增加了代码的数量减少了可读性。在这里我们还有什么其他的方法吗 像这里我们先写一个类型的重载然后下来的代码就进行一个另一种方法的书写如我们上面的代码一样。
这样就能简单的写出我们日期类的各种比较。
同时日期加天数和日期减日期也可以通过这种方式来完成。 要执行上面操作的话我们首先就要算出每个月的天数。
这个操作我们写过很多次这里就不再重复了。 再下来我们就只需要书写它的代码即可。
在这里我们如果使用的是引用的话最后会提防因为销毁的原因出现问题因此在这里我们采用的是这一种写法。
构造函数也是为了防止其销毁。
而且我们也可以由我们的来引入的代码。 像上面左右的代码都是正确的不过二者相对比左边的代码要更优一点。
这是因为左边的代码只需要创建两个对象而右边的这种却要四个的有一些亏。
同时我们的日期类还是其他的操作符可以对其使用。
类似我们的日期可以进行操作。
只不过我们的是单运算符。 但是众所周知在C语言中我们的操作符分为了前置和后置。
因此在这里我们的代码到底是调用的哪一个 用我们以前的知识来讲解。
前置是返回后的值后置是返回前的值。
虽然它们的内部都要进行操作所以不能用同一个运算符重载替代。 为此我们为后置中的参数提供了int。
增加这个int并不是为了接收具体的值这仅仅是为了占位根前置构成重载。
因为后置需要进行创建对象我们就将其牺牲掉了。 同时前置和后置在底层所代表的也不相同。
在这里我们可以看见后置我们的括号能没有任何东西而前置中则有加入一个随机的数来对其进行一个区分。
结尾 到这里我们的又增加了对类和对象的了解并且这几篇博客的内容都有关联如果在哪里没有学好的话可能会导致后序课程的乏力因此有空的时候要对其进行复习。最后希望这篇博客能有所帮助。