当前位置: 首页 > news >正文

类和对象(下)C++

1.初始化列表

1.为什么有初始化列表,它的作用?

->初始化列表,是构造函数初始化的另一种形式。

->在语法上面理解,初始化列表可以认定为是每个成员变量定义初始化的地方.

->引用成员变量,const成员变量,没有默认构造的类类型变量,他们三者必须要在自身定义时初始化。所以要将他们放在初始化列表的位置进行初始化,否则会编译报错。

2.使用形式

->以冒号作为开始标志,每个初始化以逗号作为分隔符号,每个“成员”变量后有个括号,用来放初始值或表达式。

3.C++11支持成员变量声明的位置给缺省值,主要是用于,该成员变量没有在初始化列表初始化使用的。

4.尽量使用初始化列表,因为尽管你不走初始化列表,也会走初始化列表。因为假设该成员在声明时给了缺省值,那么初始化列表会调用他的缺省值进行初始化,如果没有给缺省值,对于类置类型的成员是否初始化取决于编译器,而自定义类型,会去调用它的默认构造,如果没有相应的默认构造,又没有初始化列表。就会编译报错。

5.初始化列表的顺序,其实是按照成员变量声明的顺序来进行的。跟成员变量在初始列表出现的先后顺序无关。

 例如以下例子:

2.类型转换

1.C++支持内置类型隐式类型转换为类类型对象,需要有相关类型作为构造函数的参数。

2.构造函数前面加explicit就不再支持隐式类型转换。

3.static成员

1.static修饰的成员变量,称为静态成员变量。!!!静态成员变量一定要在类外面进行初始化。

 2.类静态成员变量属于所有的类对象,不属于某个具体的对象,不存在对象中,存在静态区。

3..类静态成员也是类的成员,受类域限制,也受访问限定符的限制(public  protected,private)

4.static修饰成员函数,成为静态成员函数,静态成员函数没有this指针。

5.静态成员函数可以访问静态成员,不能访问非静态的,因为没有this指针。

6.非静态的成员函数可以任意的访问静态成员函数静态成员。

7.突破类域可以访问静态成员 ,可以通过类名::静态成员对象.静态成员来访问静态成员和静态成员函数

8.静态成员不能在声明时给缺省值,因为缺省值是给构造函数初始化列表使用的,而静态成员不属于某一对象,所以不走初始化列表,所以也就不能给缺省值。

例题:

设已经有A,B,C,D 4个类的定义,程序中A,B,C,D构造函数调⽤顺序为?()
设已经有A,B,C,D 4个类的定义,程序中A,B,C,D析构函数调⽤顺序为?()

答案选择:E,B

4.友元 

5.内部类

 1.什么是内部类?

->一个类的定义是在另一个类的内部,!!!内部类是一个独立的类,与定义在全局的相比,他只受到类域和访问限定符的限制,所以外部类定义的对象不包括内部类。

2.内部类默认是外部类的友元类。

3.内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其 他地⽅都⽤不了。

6.匿名对象

1.用类型定义出来的是对象叫做匿名对象,而类型名+对象名定义出来的是有名对象。

2.匿名对象的生命周期只在当前那一行,一般临时定义一个对象当前用一下就可以定义临时对象。

7.对象拷贝时的编译器优化

1.现代编译器会为了尽可能提⾼程序的效率,在不影响正确性的情况下会尽可能减少⼀些传参和传参过程中可以省略的拷⻉。

2.如何优化C++标准并没有严格规定,各个编译器会根据情况⾃⾏处理。当前主流的相对新⼀点的编译器对于连续⼀个表达式步骤中的连续拷⻉会进⾏合并优化,有些更新更"激进"的编译还会进⾏跨跨表达式的合并优化。

今日份鸡汤:“如果没有天赋,那就一直重复!”

今天的学习就到此结束啦!谢谢大家支持!

 

http://www.lryc.cn/news/416518.html

相关文章:

  • 常用在线 Webshell 查杀工具推荐
  • RPC远程调用框架Dubbo
  • 基于STM32的智能灌溉系统
  • Datawhale AI 夏令营 Task3(半成品,仍在学习理解
  • 细腻呵护静音生活缓冲器,家具中的隐形侍者
  • 【MATLAB源码-第243期】基于simulink的CUK斩波电路仿真,输出各节点波形。
  • springboot项目不能同时跑junit4和junit5的解决方法
  • 【IO】使用消息队列完成两个进程之间相互通信
  • Web开发:用C#的逻辑理解VUE语法(VUE + Webapi小白开发笔记)
  • 操作系统文件位置指针
  • 设计模式的概念
  • VMware17下载与安装
  • mv命令学习
  • 西北航天基地采用Infortrend NAS存储做影视后期及共享
  • GitHub每日最火火火项目(8.6)
  • LangChain与CI/CD的无缝对接:自动化部署的新前沿
  • Laravel为什么会成为最优雅的PHP框架?
  • LabVIEW中的Reverse String函数与字节序转换
  • 用OpenCV与MFC写一个简单易用的图像处理程序
  • go语言的actor框架和air工具有什么区别?
  • e6.利用 docker 快速部署自动化运维平台
  • 回顾前面刷过的算法(4)
  • SourceTree配置多个不同Remote地址的仓库
  • 【Golang 面试 - 进阶题】每日 3 题(十三)
  • 自定义线程池(二)
  • 【Linux】常见指令
  • uniapp自定义网格布局用于选择金额、输入框焦点事件以及点击逻辑实战
  • 中小学创客室培养学生全面发展
  • AI Agent智能体落地应用测试,一句话即可操控它执行工作
  • 免费的SD-WAN服务