c++类和对象新手保姆级上手教学(下)

目录

前言:

初始化列表:

explicit关键字:

static成员:

 友元函数:

友元类:

 内部类:

匿名对象:

前言:

  类和对象下篇中剩余的部分较为简单易理解,认真记住概念知识点即可。

初始化列表:

在中篇中我们提到了构造函数的功能是初始化变量,接下来讲到的初始化列表也有同样的功能。

用法:

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

既然它的功能和构造函数一样,那为什么要有初始化列表呢?

当然是为做到构造函数做不到的事情,比如:

我们有一个const的变量,那么就代表它在被定义的时候就必须被初始化,如果我们用构造函数,就会报错,如下:

 

而初始化列表就可以很好地解决这个问题:

如果成员变量有引用,也是只要定义就必须初始化的时候,也只能用初始化列表完成;

必须用初始化列表的三种情况:

1.const成员变量 

2.引用

3.自定义变量(没有默认的构造函数)

 注意初始化列表的初始化顺序是按声明的顺序从上到下,而不是按初始化列表的顺序。

建议大家以后能写初始化列表就尽量写初始化列表,初始化列表的顺序尽量按照声明顺序来写。

explicit关键字:

在C++98中,单参数构造函数,支持隐式类型转换,比如:

这样写代码会方便一点,那么多参数的构造函数有没有这个隐式类型转换呢?

C++11中,支持了多参数的构造函数隐式类型转换:

那么有没有什么办法让这个隐式类型转换不发生呢?很简单,在构造函数前,加上关键字explicit即可:

可以看到加上后再使用隐式类型转换会直接报错。

static成员:

当我们想定义一个全局变量,又想用类来封装时,不妨试试我们类里的static成员变量:

它不属于某一个对象,而是属于所有对象,属于整个类。 

 static成员函数也可以同理实现:

static的成员函数是没有this指针的,所以是没办法访问成员变量的。 

 友元函数:

如下图,我们在类外定义的函数,无法访问类里面私有的成员变量:

但是我们就想让这个函数访问到,又不想让私有成员变成公有,可以采用友元声明:

 

友元类:

跟刚才友元函数差不多,在A类对B类声明友元,那么在B类中就可以直接访问A类成员,比如:

不建议经常使用友元,友元虽然便利,但是打破了封装 

 内部类:

概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

 特性: 

1. 内部类可以定义在外部类的public、protected、private都是可以的。
2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
3. sizeof(外部类)=外部类,和内部类没有任何关系。

4.内部类天生就是外部类的友元。

匿名对象:

c语言中有匿名结构体,c++也有匿名对象:

匿名对象的生命周期只在当前一行,有时候只需要调用类里面的一个函数时,可以用匿名对象。 

c++类和对象到此结束。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484532.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从大厂裸辞后成为自由职业者,一年后我怎么样了?

深耕技术领域7年,前前后后也做过不少副业,最近我一直在思考什么副业才是对自己有价值的,可持续的,甚至是可增长的。 22年我所在团队的一个项目解散了,领导问我想拿钱走还是转岗,想想自己也在这个公司干了5…

猫头虎分享已解决Bug || TypeError: unhashable type: ‘slice‘

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

Java毕业设计-基于ssm的校园二手交易管理系统-第67期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的校园二手交易管理系统:前端jsp、jquery,后端 springmvc、spring、mybatis,集成商品管理、订单管理、销售管理、采购管理、购…

【ACW 导入数据库脚本】

版本: 1.2.2-JDK17-SNAPSHOT 项目地址:wu-smart-acw 演示地址:演示地址 admin/admin docker启动 docker run -d -it -p 18080:18080 -e MAIN_DB_HOSTcloud-mysql:3306 -e MAIN_DB_USERNAMEroot -e MAIN_PASSWORDmysql --name wu-smart-acw-server …

猫头虎分享已解决Bug || 容器编排问题:OrchestrationFailure, ContainerManagementError

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【CANoe示例分析】EthernetTC8Test

1、工程路径 C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 15.3.89\Ethernet\Test\EthernetTC8Test 在CANoe软件上也可以打开此工程:File|Help|Sample Configurations|Ethernet Testing|TC8Test(Ethernet) 2、示例目的 TC8示例是作者本人使用最多的CANo…

Web服务器集群: kylin 部署 Halo博客系统

目录 一、实验 1.环境 2. kylin 部署mysql数据库 3. kylin 构建Java运行环境 4. 创建博客使用的数据库 5. kylin 部署 halo博客系统 6. kylin 部署nginx 7. kylin 使用 SSL证书基于https访问部署的博客系统 二、问题 1.mysql安装报错 2.查看mysql数据库报错 3.syste…

【大数据】Flink 之部署篇

Flink 之部署篇 1.概述和参考架构2.可重复的资源清理3.部署模式3.1 Application 模式3.2 Per-Job 模式(已废弃)3.3 Session 模式 Flink 是一个多用途框架,支持多种不同的混合部署方案。下面,我们将简要介绍 Flink 集群的构建模块、…

选择VR全景行业,需要了解哪些内容?

近年来,随着虚拟现实、增强现实等技术的持续发展,VR全景消费市场得以稳步扩张。其次,元宇宙行业的高速发展,也在进一步拉动VR全景技术的持续进步,带动VR产业的高质量发展。作为一种战略性的新兴产业,国家和…

Qt程序设计-中英文输入法软键盘实现

本文讲解Qt中英文输入法软键盘实现。 实现目标 中英文切换、大小写切换、特殊字符切换、 使用谷歌中文字库txt文档。 在QWidget窗体上实现,可视化编写软键盘。 实现过程 准备工作:下载谷歌中文字库,按键的图片 创建QWidget项目,在主窗体上添加一个按钮,用于弹出软键…

[论文精读]Do Transformers Really Perform Bad for Graph Representation?

论文网址:[2106.05234] Do Transformers Really Perform Bad for Graph Representation? (arxiv.org) 论文代码:https://github.com/Microsoft/Graphormer 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼…

喜讯 | 重庆炼石入选重庆市科技局科技型企业

近日,重庆炼石网络技术有限公司(以下简称“重庆炼石”)经过严格审查,获得由重庆市科学技术局备案、重庆生产力促进中心(重庆市科技型企业系统受托管理单位)发证的《重庆市科技型企业备案证书》,…