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

news2024/9/24 5:26:38

目录

前言:

初始化列表:

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.coloradmin.cn/o/1463678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三opencv源码解压及环境变量配置

1.双击opencv-3.4.6-vc14-vc15.exe 2.选择解压的路径,点击【extract】 3.设计环境变量

05.STLvector、list、stack、queue

STL标准模板库 standard template library STL将原来常用的容器和操作进行封装,增加了C的编码效率 容器 string #include vector #include list #include stack #include queue #include set #include map #include 迭代器 容器和算法之间的粘合剂&#xff0…

【海贼王的数据航海:利用数据结构成为数据海洋的霸主】时间复杂度 | 空间复杂度

目录 1 -> 算法效率 1.1 -> 如何衡量一个算法的好坏? 1.2 -> 算法的复杂度 2 -> 时间复杂度 2.1 -> 时间复杂度的概念 2.2 -> 大O的渐进表示法 2.3 -> 常见时间复杂度计算 3 -> 空间复杂度 4 -> 常见复杂度对比 1 -> 算法效…

数字化转型导师坚鹏:数字政府技术、业务、数据融合发展路径探索

数字政府建设与发展研究 ——技术、业务、数据融合发展路径探索 课程背景: 很多政府存在以下问题: 不清楚数字政府建设内涵 不清楚数字政府建设现状 不清楚数字政府融合路径 课程特色: 有实战案例 有原创观点 有精彩解读 学…

来分析两道小题

一、源码 二、分析 首先它会接两个参数一个是id一个是ps,传递的话会包含一个flag.php,然后数据库连接,之后传递过滤,然后查询,如果查到了就会取id,取出来看是不是跟adog一样,如果是它告诉你账号…

Imagewheel私人图床搭建结合内网穿透实现无公网IP远程访问教程

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

四年功能测试,测试工作吐槽

这篇文章基于中小公司的工作经验,中小厂的测试流程往往没有大厂那么规范,也会遇到很多挑战,来看下他是怎么解决的 问题一:测试时间评估 这是一个工作日常经常需要回复的问题,理论上 测试这边要做出较科学合理的回复&…

Flutter学习4 - Dart数据类型

1、基本数据类型 num、int、double (1)常用数据类型 num类型,是数字类型的父类型,有两个子类 int 和 double 通过在函数名前加下划线,可以将函数变成私有函数,私有函数只能在当前文件中调用 //常用数据…

2024 财源(裁员)广进(鸿蒙开发岗)~

2023已过去了,2024大家都在期待经济复苏起来,但并没有起来,倒是第一波 “裁员潮”突然来袭: 这一波突然袭击,使得一些年后想换工作的人不敢轮乱动了,真不知道哪一天起床就失业了 今年我已经接到了太多粉丝…

力扣OJ题——随机链表的复制

题目: 138. 随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 要求:构造这个链表的 深拷贝 深拷贝应该正好由 n 个 全新 节点组成,其中…

LabVIEW多通道压力传感器实时动态检测

LabVIEW多通道压力传感器实时动态检测 介绍了一种基于LabVIEW的多通道压力传感器实时动态检测系统,解决压阻式压力传感器温度补偿过程的复杂度,提高测量的准确性。通过自动轮询检测方法,结合硬件检测模型和多通道检测系统设计,本…

【动态规划专栏】专题三:简单多状态dp--------3.删除并获得点数

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

ios抓包Tunnel to......443

fiddler官网下载“CertMaker for iOS and Android”插件,官网插件:https://www.telerik.com/fiddler/add-ons 双击运行插件后,重启fiddler,ios重新安装证书即可

九州金榜|家庭教育小技巧

家庭教育对于孩子的发展至关重要,家长一定要重视孩子在家里的举动,同样孩子犯错,对于孩子批评也是有一定技巧,下面九州金榜家庭教育给大家分享一下关于在家庭教育中的一些小技巧,帮助大家怎样在家庭教育中面对孩子 1、…

字节一面 : post为什么会发送两次请求?

同源策略 在浏览器中,内容是很开放的,任何资源都可以接入其中,如 JavaScript 文件、图片、音频、视频等资源,甚至可以下载其他站点的可执行文件。 但也不是说浏览器就是完全自由的,如果不加以控制,就会出…

DPDK应该如何入门学习?

01 写在前面 我的读者当中应该有一部分人是做 DPDK 相关的,我自己虽然现在已经不做 DPDK 了,但对这块仍然有兴趣,今天这篇文章就来总结下 DPDK 的技术栈。注意:这篇文章是小白文,不适合大神哦。 文章从 DPDK 的产生背…

四.QT5工具安装和环境变量的配置

1.以管理员身份运行安装包 2.登录qt账号,点击【next】 3.选中同意 4.选择安装目录,注意不能有中文和空格 5.勾选 64位 mingw。点击【next】,等待安装完成 6.配置环境变量

QT基本组件

四、基本组件 Designer 设计师(重点) Qt包含了一个Designer程序,用于通过可视化界面设计开发界面,保存文件格式为.ui(界面文件)。界面文件内部使用xml语法的标签式语言。 在Qt Creator中创建文件时&#xf…

Java面向对象案例之家禽对象Poultry(3)

类主要结构图 抽象类:Poultry(家禽作为父类)子类:Chook(鸡类)、Duck(鸭子类)测试类:PoultryTest 类的方法图 代码示例 /*** 测试类*/ public class PoultryTest {public…

【STM32学习】——续上:软件SPI读写W25Q64SPI通信外设硬件SPI读写W25Q64

四、软件SPI读写W25Q64 工程思路与I2C类似,MySPI.c是通信底层,主要包括通信引脚封装、初始化、SPI通信的三个拼图(起始、终止和交换一个字节);基于此文件建立W25Q64.c,调用MySPI三个拼图,拼接成…