(构造函数的补充2)类型转换与临时变量(新对象)的生成与explicit关键字,类的静态成员变量与成员函数及其应用

news2024/11/15 23:30:39

(构造函数的补充2)类型转换与临时变量(新对象)的生成与explicit关键字

  1. 如果说一个构造函数是单个参数,或者说有多个参数但是第一个参数没有默认值,而其余均有默认值,这时候就特别需要注意类型转换的问题。
  2. 首先必须得知道的一点就是说一旦有类型转换发生,那么就必然会有临时变量的生成,然后因为临时变量是具有常性的,所以这边又会牵扯到之前的一个引用的权限问题,这别不做过多延伸,之前我博客写过。在这里插入图片描述
    在这里插入图片描述
  3. 然后比如说用一个类a的实例化对象去等于另外一个不同类型的变量(比方说是内置类型),那么首先就是会创建一个临时变量(并且这个临时变量的类型的话就是a,所以说开辟出来也就是a的大小),然后这时候就相当于类的实例化对象被创建了一个出来,根据一语双关的知识的话,就可以立马得知与此同时构造函数也得以进行同步调用,并且这个构造函数的参数索取的话,就会用等号右边的那个变量
    在这里插入图片描述
  4. 然后接下来这个刚刚创建的临时变量(也可以称之为类型a的一个无名对象)再会给等号左边的那个实例化对象进行一个赋值操作,流程的话大概就是这样子。在这里插入图片描述
  5. 上述代码可读性不是很好,用explicit修饰构造函数,将会禁止构造函数的隐式转换在这里插入图片描述

类中的静态成员有关知识介绍

  1. 用static修饰类的实例化对象,那么就说明此刻那个对象是在内存的静态区里面,就不是在当前的函数栈帧里面,就说明两点:第一的话就是说不会随着函数栈帧的销毁而发生消灭;第2点就是说他也不会被重复创建,因为就已经在静态区里面了,他也重复创建不了
  2. 就是说在类当中不仅可以定义普通的那些成员变量,你也可以去定义那些静态成员变量。这两者的区别就在于对于那些普通的成员变量而言,它是属于每一个类的实例化对象;然后对于那些静态成员变量而言,它是属于类,相当于是属于每一个类的实例化对象共享;一个是存储在类的实例化对象的内存空间当中,而那个静态的成员变量,它是存储在内存的静态区当中,所以说他的生命周期是全局的。
  3. 然后他静态成员变量声明的时候当然很容易,但是定义的时候就会发生很多麻烦,很明显的一点就是说不可能在类当中去定义,所以说对于类的静态成员变量是在全局位置,也就是在类的外面去定义的。
int A::_scount = 0;
  1. 单纯在一个类当中的话,普通成员函数当中是可以去调用静态成员函数的,但是在静态成员函数当中是不能够去调用普通成员函数,最主要的原因在于他是没有this指针的,而如果说你在静态成员函数当中去放一个普通成员函数,那么那个普通成员函数this指针这个空白由谁来填?
  2. 在这里插入图片描述

静态成员变量的总结

  1. 不会出现在构造函数
  2. 没有缺省值
  3. 必须在类外面初始化:
int A::_scount = 0;
  1. 在类中的可以自由被使用
  2. 在类外面要直接访问,首先必须是public,然后就这样:
Stu::_scount
  1. 如果是private/protect,只能去实现一个成员函数获取该静态成员变量

静态成员函数的总结

  1. 没有this 指针, 所以在静态成员函数中访问类的成员变量与调用其他成员函数
  2. 类外面调用的话,首先必须是public,然后就是直接这样调用:(不是必须要 实例化对象 . 成员函数 这样子)
类名:: func();

静态成员变量与函数的应用1

luck
在这里插入图片描述
代码:

class Sum
{
public:
    Sum()
    {
        s+=i;
        i++;
    }
    int static GetSum()
    {
        return s;
    }
private:
    static int i;
    static int s;
};
int Sum::i =1;
int Sum::s =0;
class Solution 
{
public:
    int Sum_Solution(int n) 
    {
        Sum arr[n];
        return Sum::GetSum();
    }
};

静态成员变量与函数的应用2

  1. 设计一个类,在类外面只能在栈上创建对象,设计一个类,在类外面只能在堆上创建对象
class A
{
public:
	static A GetStackObj()
	{
		A aa;
		return aa;
	}
	static A* GetHeapObj()
	{
		return new A;
	}
private:
	A()
	{}
};
int main()
{
	A::GetStackObj();
	A::GetHeapObj();
	return 0;
}

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

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

相关文章

Vue中的键盘事件

目录 一、Vue中的键盘事件的类型 二、keycode指定具体的按键 三、Vue中常用的按键别名 四、Vue自定义按键 五、实现多个按键一起触发事件 一、Vue中的键盘事件的类型 keydown:键盘按下就会触发 keyup:键盘抬起就会触发 二、keycode指定具体的按键 在键盘中,每一…

JMeter测试工具设置中文

JMeter测试工具设置中文 在JMeter中,默认情况下是英文的,如果需要使用中文进行测试,则需要进行如下设置: 第一步、设置JMeter语言选项 在JMeter运行时界面的“Options”菜单中,选择“Choose Language”,…

2023.05.10- 使用Loopback Scaler来改善Stable Diffusion的绘图效果

简介 Loopback Scaler可以添加画面细节 渣图挽救者:在图生图中对原图迭代重绘,修复渣图。脚本在多个循环中处理输入图像,每个循环提高分辨率并优化图像质量。然后,一个循环的图像结果作为下一个循环的输入图像插入,该…

FE_Vue框架的执行流程详解

1 分析脚手架结构 2 整个流程 执行npm run serve,随后来到src中找到【整个项目的入口文件】main.js,这个js页面中引入了Vue、App.vue、关闭了提示等。 // ps: 该文件是整个项目的入口文件 // step1 引入Vue import Vue from vue // step2 引入App组件-…

Android9.0 Charles 模拟器抓包

目录 只想做条安静的咸鱼,混吃等死又一天 一、下载并安装配置Charles 二、下载安装Postern 三、测试抓包 一、下载并安装配置Charles 1.Charles下载网址👇 Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Rev…

EasyPoi导出,设置不同列的字体颜色(修改easypoi 3.1.0版本源码)

声明&#xff1a;代码以esaypoi 3.1.0版本为基础&#xff0c;基本上新的代码都是直接copy源码的&#xff0c;只是稍微修改了源码&#xff1b;仍然需要导入该依赖是 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifac…

数据建模三范式说明

三范式&#xff1a; 1.原子性&#xff1a;属性不可分割 2.唯一性&#xff1a;不能存在部分依赖 3.非冗余性&#xff1a;要求任何字段不能由其他字段派生出来、确保每列都和主键列直接相关,而不是间接相关)

案例|九江银行Zabbix监控系统实践

Zabbix监控平台建设历程 九江银行Zabbix监控系统实践&#xff0c;共分为三个部分&#xff1a; 1.Zabbix监控平台的建设历程 2.Zabbix实践经验分享 3.对未来监控的展望。 项目背景 建立新的一体化基础监控平台。为适应数字化转型的需要、新技术发展的需要及业务连续性的需…

关于使用Lombok的注意事项

文章目录 1、Lombok简介2、使用Lombok的问题2.1 驼峰问题2.2 相同的字符串不同的大小写 3、关于使用Lombok的总结4、写在最后 1、Lombok简介 Lombok项目是一个Java库&#xff0c;它会自动插入您的编辑器和构建工具中&#xff0c;从而为你优化Java代码。通过注解的方式代替我们手…

注入攻击(二)--------HTML(有源码)

前序文章 注入攻击&#xff08;一&#xff09;--------SQL注入(结合BUUCTF sqli-labs) 目录 示例网站搭建1.搭建LAMP开发环境1. MySQL2. PHP3. Apache 写在示例前示例1.反射型HTML注入页面效果源码 示例2.钓鱼表单页面效果源码 示例3.存储型HTML注入页面效果源码 示例网站搭建 …

【Docker】使用 Docker 部署 Maven 仓库

在本文中&#xff0c;将介绍如何使用 Docker 部署一个 Maven 本地私服。Maven 私服可以帮助我们管理和共享本地的 Maven 依赖&#xff0c;提高开发效率。本文将使用 Sonatype Nexus 作为 Maven 私服&#xff0c;并使用 Docker Compose 来部署和管理容器。 准备工作 在开始之前…

mysql数据库在windows服务器下安装

一、mysql安装包下载 官网下载地址&#xff1a;mysql安装包下载 如图所示&#xff1a; 二、配置my.ini文件 解压后的文件尽量不要放在C盘&#xff08;内存小&#xff09;&#xff0c;解压后如下图所示 在上图所示根目录下配置my.ini文件 1、右键创建一个文本&#xff08;.text…

pikachu靶场-Unsafe Upfileupload

文件上传漏洞简述 什么是文件上传漏洞&#xff1f;  ​ 凡是存在文件上传的地方均有可能存在文件上传漏洞&#xff0c;关于上传文件操作的时候对方代码写的是否完整、是否安全&#xff0c;一旦疏忽了某个地方可能会造成文件上传漏洞。 文件上传的原理 网站Web应用都有一些文件…

1.SpringBoot基础篇

SpringBoot 文档更新日志 版本更新日期操作描述v1.02021/11/14A基础篇 前言 ​ 很荣幸有机会能以这样的形式和互联网上的各位小伙伴一起学习交流技术课程&#xff0c;这次给大家带来的是Spring家族中比较重要的一门技术课程——SpringBoot。一句话介绍这个技术&#xff0c;…

华为pbr双出口外线,指定内网单个vlan绑定单个出口外线上网

公司两条外线&#xff0c;vlan 10用nat走上面转发出去上网&#xff0c;vlan 20 走下面那条外线出去nat上网 AR2&#xff1a; interface GigabitEthernet0/0/0 ip address 6.6.6.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 154.1.2.3 255.255.255.0 interface…

Python+Selenium4环境搭建

set集合 怎么把列表种相同的数据和不同的数据取出来 1.把列表转为set集合 2.按照集合的交集 selenium 自动化测试&#xff1a;自动化测试就是通过代码或者是工具模拟人的行为来进行对WEB&#xff08;APP&#xff09;来进行操作。 QTP (HP公司)&#xff1a;以录制回放的模式…

集7大模态(视频、图片、音频、文本、深度图、热力图、惯性)的IMAGEBIND

论文&#xff1a;IMAGEBIND: One Embedding Space To Bind Them All GitHub&#xff1a;https://github.com/facebookresearch/ImageBind Meta AI 提出了 ImageBind&#xff0c;它通过利用多种类型的图像配对数据来学习单个共享表示空间。该研究不需要所有模态相互同时出现的数…

《Kubernetes证书篇:基于cfssl工具集一键生成二进制kubernetes集群相关证书(方法一)》

一、背景信息 Kubernetes 需要 PKI 证书才能进行基于 TLS 的身份验证。如果你是使用 kubeadm 安装的 Kubernetes&#xff0c; 则会自动生成集群所需的证书。如果你是使用二进制安装的 Kubernetes&#xff0c;则需要自己手动生成集群所需的证书。 1、首先从etcd算起 1、etcd CA…

百度地图绘制地区的棱柱效果-定位-自定义点-文本标记-信息弹窗

文章目录 百度地图webgl使用自定义地图样式地区镂面棱柱效果绘制点信息以及信息弹窗 百度地图webgl使用 在项目的index.html中引入 <script type"text/javascript" src"//api.map.baidu.com/api?typewebgl&v1.0&ak你的AK秘钥"></script…

花式反转字符串

文章目录 简单反转字符串题目详情分析Java完整代码 反转链表进阶问题题目详情分析Java完整代码 左旋转字符串题目详情分析Java完整代码 反转字符串中的单词题目详情分析Java完整代码 本文对常见的反转字符串题目进行串烧整理。 简单反转字符串 题目详情 编写一个函数&#xf…