内部类 ,匿名对象,编译器优化和静态成员

news/2025/3/15 6:57:32/

一.静态成员

        1.1 了解静态成员

⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在类外进⾏初始化。
        
报错了,是因为 不能直接给它值,这里只是声明,这里的值是缺省值,静态成员是属于静态区的,所以不会走初始化列表,所以不能给它缺省值,必须在类外初始化
这样就是正确的了。
静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。

        

        我们发现静态变量并不属于类本身,类的作用只是给静态变量了一个类域,使其访问受限。 

⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。
        
我们注释的那一行,当我们试图访问成员变量a,但是无法访问,因为类中的方法访问类中的变量都是通过this指针去访问的,但是静态方法没有this指针。
静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。
⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
突破类域就可以访问静态成员,可以通过类名::静态成员 或者 对象.静态成员 来访问静态成员变量
和静态成员函数。
        
就是如图的两种方式。
静态成员也是类的成员,受public、protected、private 访问限定符的限制。
静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员
变量不属于某个对象,不⾛构造函数初始化列表。

        1.2 应用

        
我们来看一下题,题目要求限制了我们的所有解法,这时候就可以用静态成员来做了。
这是我们的做法,通过静态变量来实现,全局也可以,但是没有静态变量好,全局谁都可以访问,可能导致数值不小心改变。
大家可以看一下这个的打印顺序,就是CABD,先全局的,后面按照顺序打印。
大家再想想如果是析构呢?
这个我们的做法就是先看普通的不看静态和全局的,普通的是后定义的先析构,然后再看静态,最后是全局的,所以是BADC。

二.内部类

1.1 了解内部类

        如果⼀个类定义在另⼀个类的内部,这个内部类就叫做内部类。内部类是⼀个独⽴的类,跟定义在 全局相⽐,他只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。

        我来解释一下这句话,就是内部类也是独立的,只是受到了类域的限制,并不属于外部类。

        

        大家可以看这个例子就明白了,结果是4,并没有算内部类B中变量所占的空间。

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

        

        内部可以访问到通过实例化访问外部的私有化变量,但是外部类不能访问内部的,可以说就是外部类就是为内部类服务的。

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



        1.2 应用

        我们上面的那个牛课题就可以进一步改善了。

        

        可以改成这样,外部类服务内部类,此时可以让它更加的安全和简洁。

        



        三.匿名对象

        1.1 了解匿名对象

        

        ⽤ 类型(实参) 定义出来的对象叫做匿名对象,相⽐之前我们定义的 类型 对象名(实参) 定义出来的 叫有名对象匿名对象⽣命周期只在当前⼀⾏,⼀般临时定义⼀个对象当前⽤⼀下即可,就可以定义匿名对象。

        匿名对象顾名思义就是没有名字的对象,比如我们主函数中的前两行就是两个匿名对象,他的声明周期只在它的那一行,那一行运行完了,就析构了,和临时对象一样都具有常兴,不能被普通的引用指向,可以被const的引用指向

        下面的倒数第三行,const引用const会延长匿名对象的声明周期,匿名周期就变成了aa1这个引用的声明周期了,你可以理解为匿名对象完成使命后它的那一行结束之后,自己就关机了,const使他重新开机了,就是延长了声明周期了,匿名周期就变成了aa1这个引用的声明周期了。



        1.2应用

        就是我们上图中的最后一行,直接调用函数,不用使用实例化去调用,使得代码更加简洁。

        不仅有这一个作用,我们还可以做缺省值。

        

        如上图,做了缺省值。

        

        五.结束语

         感谢大家的查看,希望可以帮助到大家,做的不是太好还请见谅,其中有什么不懂的可以留言询问,我都会一一回答。  感谢大家的一键三连。


http://www.ppmy.cn/news/1579252.html

相关文章

现代密码学 | 具有保密和认证功能的安全方案

1.案例背景 1.1 2023年6月,微软云电子邮件泄露 事件描述: 2023年6月,属于多家美国政府机构的微软云电子邮件账户遭到非法入侵,其中包括了多位高级政府官员的电子邮件。据报道,美国国务院的10个邮件账户中共有6万封电…

基于Python+Django的网上招聘管理系统

项目介绍 PythonDjango网上招聘系统的设计与实现(Pycharm Django Vue Mysql) 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。 - 前台功能包括:首页、岗位详情页、简历中…

【动态规划篇】746.使用最小花费爬楼梯

746.使用最小花费爬楼梯 题目链接: 746.使用最小花费爬楼梯 题目叙述: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 …

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

基于PySide6与PyCatia的CATIA几何体智能重命名工具开发实践

一、工具概述 本工具基于CATIA V5/V6的二次开发接口,结合PySide6图形界面框架与PyCatia自动化库,实现了三大核心功能模块:几何体前缀批量添加、后缀动态追加、智能文本替换。该工具显著提升了工程师在大型零件体设计中的几何体命名管理效率&…

Python----计算机视觉处理(Opencv:自适应二值化,取均值,加权求和(高斯定理))

一、自适应二值化 与二值化算法相比,自适应二值化更加适合用在明暗分布不均的图片,因为图片的明暗不均,导致图片 上的每一小部分都要使用不同的阈值进行二值化处理,这时候传统的二值化算法就无法满足我们的需求 了,于是…

在 Linux 64 位系统上安装 Oracle 11g R2 数据库的完整指南

linux.x64_11gR2_database 是 Oracle 数据库 11g 第 2 版(11g Release 2)的安装包,适用于 64 位 Linux 操作系统。这个安装包包含了在 64 位 Linux 系统上安装 Oracle 数据库所需的全部文件和组件。 安装步骤概述 以下是在 Linux 系统上安装…

PDF文件里到底有什么?

PDF 文档结构由多个组件组成,这些组件决定了文本、图像和其他元素的存储和显示方式。PDF 是一种二进制文件格式,这意味着您无法在文本编辑器中直接编辑 PDF 文件。添加或删除一个字符都可能导致整个文件损坏! PDF 文件结构 理解 PDF 文档结…