[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

这篇具有很好参考价值的文章主要介绍了[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.运算符重载补充:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

1.流插入运算符:

我们知道进行运算符重载这个函数的参数的左右类型是非常重要的,我们尝试在类中去定义这个流插入重载!

1.考虑到隐含的参数指针:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

2.进行优化!

我们观察上面的代码发现可以实现在类中进行流插入运算符的一个重载但是我们需要考虑隐含参数的位置所以我们进行传参的时候就 写成了 == d1<<cout ==.

上面这个语句是非常奇怪的因为我们之前使用cout的时候把类型的数据插入到cout中但是上面这个就是把cout插入到d1中这是不好的!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

没有人规定类的操作符必须要写在类中!
我们把函数定义到全局中-》出现了一个问题我们在全局中是找不到成员变量的!我们成员变量是私有的我们不希望成员变量不去使用成员函数而发生改变!

2-1:解决办法:友元

通过friend 关键字去在类中声明一个友元函数就可以解决,我是你的朋友可以访问私有的成员变量!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

2-2:流插入一定满足连续?

我们通过前面的知识我们知道满足连续性这个函数就需要一个返回值!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

3.总结:

其他的运算符一般是实现在成员函数中,但是流插入和流提取操作符是实现在全局的。

1.因为存在隐含的参数(影响了操作符的顺序)。
1-1:写在全局改变了函数传参的顺序并且满足了正常的cout的使用顺序!

2.写到全局访问不到私有的问题?
2-1:友元解决!

2.流提取运算符:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言
[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言
[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

二.const 成员:

1.概念进入:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

我们观察上面的代码会发现?
我们定义了一个const Date 类型的d2是不想要d2这个日期对象被修改但是我们的隐含参数默认是一个Date* 类型,所以参数列表不匹配!

通过将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

2.具体操作:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言
[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

需要特别注意成员函数定义和声明分开的时候const都需要加上和缺省参数不一样!

3.参数变化:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

3-1:权限下降!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

4.成员函数const 原则:

1.可以定义成const 的成员函数都应该定义,这样const 和非const 对象都可以调用。
2.如果不去定义const 那么const类型的对象就不可以去进行成员函数调用!
3.如果有需要修改成员变量的函数不可以使用const去修饰!

三.构造函数补充:

1.初始化:

我们之前通过构造函数去初始化成员变量其实是一种赋值!

虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称之初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。

2.初始化列表:

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

3.作用:

1.const的初始化:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

2.引用的初始化:

我们知道引用是必须需要初始化,第一次是地址,之后都是赋值!所以我们不可以让引用类型的成员变量在赋值的时候再去拿到别的值! 不然会产生赋值之后的这个成员变量到底是谁的别名! 通过在初始化列表进行初始化我们再去赋值我们就知道这个引用是谁的别名。

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

3.自定义类型成员的初始化:

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

我们通过初始化列表就可以自己搞定初始化一个队列!

3-1.自定义类型初始化列表:

通过初始化列表自己去调用对应的构造函数去完成我们想要多大的栈就可以初始化多大的栈!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

3-2.所有都可以使用初始化列表?

我们不能完全舍弃构造函数初始化!因为对于构造函数来说处理栈空间开辟是否成功等比较长的代码上是比较有优势的。初始化列表没有办法去判断栈空间是否开辟成功!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

4.初始化列表的顺序!

初始化列表要和类的成员变量定义顺序相同!
[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

4.总结:

1.引用,const,没有默认构造的自定义类型成员!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

2.自定义类型的成员有显示的构造函数!

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表),c++,开发语言

3.尽量使用初始化列表因为不使用也会走到初始化列表中!

3-1:

80%----100% 使用初始化列表:
0%-20% 进行初始化列表+构造函数的混和使用!文章来源地址https://www.toymoban.com/news/detail-739062.html

到了这里,关于[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】类与对象(2补充运算符重载,const成员)

    作者:爱写代码的刚子 时间:2023.5.11 本篇作为【C++】类与对象(2)的补充(运算符重载、const成员) 赋值运算符重载 运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类 型,函数名字以及参数列表,其返回值类

    2024年02月04日
    浏览(44)
  • 【C++初阶】五、类和对象(日期类的完善、流运算符重载函数、const成员、“&”取地址运算符重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【C++初阶】四、类和对象 (构造函数、析构函数、拷贝构造函数、赋值运算符重载函数)-CSD

    2024年02月05日
    浏览(50)
  • 【C++】类和对象(中)---拷贝构造函数、赋值运算符重载

    个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C++之路】💌 本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长,共同进步。🍓 拷贝构造函数,又称复制构造函数,是一种特殊的

    2024年02月05日
    浏览(49)
  • 【C++基础(六)】类和对象(中) --拷贝构造,运算符重载

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++初阶之路⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C++   🔝🔝 本章重点: 本篇文章将详细讲解拷贝构造函数 和运算符重载,并介绍const成员的概念 拷贝构造函数和运算符重载 是类和对象中六大默认成员函数

    2024年02月14日
    浏览(42)
  • 【C++】:类和对象(中)之拷贝构造函数+赋值运算符重载

    在现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎 那在创建对象时,可否创建一个与已存在对象一某一样的新对象呢? 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调

    2024年02月06日
    浏览(47)
  • C++ -3- 类和对象 (中) | 拷贝构造函数 & 赋值运算符重载

    示例: 拷贝初始化构造函数的作用是将一个已知对象的数据成员值拷贝给正在创建的另一个同类的对象 无穷递归 ? Date(Date d){……} 首先,分析 传值传参的过程 传引用传参 : 没有拷贝 的过程,直接传 传值传参: 内置类型 编译器可以直接拷贝(浅拷贝/值拷贝——一个字节

    2023年04月19日
    浏览(80)
  • 【C++】类和对象(中)之拷贝构造与运算符、操作符重载

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》 🌝 每一个不曾起舞的日子,都是对生命的辜负 我们继续学习默认成员函数,本篇文章博主带来的是拷贝构造函数与运算符、操作符重载的讲解,并且还有

    2024年02月05日
    浏览(54)
  • 【C++深入浅出】类和对象中篇(六种默认成员函数、运算符重载)

    目录 一. 前言  二. 默认成员函数 三. 构造函数 3.1 概念 3.2 特性 四. 析构函数 4.1 概念 4.2 特性 五. 拷贝构造函数 5.1 概念 5.2 特性 六. 运算符重载 6.1 引入 6.2 概念 6.3 注意事项 6.4 重载示例 6.5 赋值运算符重载 6.6 前置++和后置++运算符重载 七. const成员函数 7.1 问题引入 7.2 定义

    2024年02月09日
    浏览(64)
  • 【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

    🔥 个人主页: Forcible Bug Maker 🔥 专栏: C++ 目录 前言 拷贝构造函数 概念 拷贝构造函数的特性及用法 赋值运算符重载 运算符重载 赋值运算符重载 结语 本篇主要内容:类的6个默认成员函数中的 拷贝构造函数 和 赋值运算符重载 在上篇文章中我们讲到了类的默认成员函数的

    2024年04月17日
    浏览(48)
  • C++ 类和对象篇(八) const成员函数和取地址运算符重载

    目录 一、const成员函数 1. const成员函数是什么? 2. 为什么有const成员函数? 3. 什么时候需要使用const修饰成员函数?  二、取地址运算符重载 1. 为什么需要重载取地址运算符? 2. 默认取地址运算符重载函数 3. 默认const取地址运算符重载函数 4. 什么时候要显示重载取地址运算

    2024年02月07日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包