c++类和对象收尾

news2025/4/16 20:23:00

文章目录

  • 隐式类型转换
  • 匿名对象
  • 拷贝+构造----->构造


隐式类型转换

//隐式类型转换
class A
{
public:
	/*explicit A(int a )
		:_a(a)
	{
		cout << "A(int a )" << endl;
	}*/

	A(int a)
		:_a(a)
	{
		cout << "A(int a )" << endl;
	}

	A(const A& aa)
	{
		cout << "A(const A& aa)" << endl;
	}
private:
	int _a;
};

int main()
{
  A a1(1);//直接构造
  A a2 = 2;
  
  int i = 2;
  double d = i;
  
  const A& a3 = 3;
  return 0;
}

A a1(1);是直接构造,A a2 = 2;是构造+拷贝构造 ,2会隐式转换为A类型对象,此时就生成了一个A类型的临时对象,然后它会调用构造函数,之后再将这个临时对象,拷贝构造初始化a2,但是编译器会优化,直接是调用构造函数了,构造+拷贝构造 ---->构造

它发生的隐式类型转换就和内置类型一样
在这里插入图片描述
这里是先将i隐式转换为double,转换过程中会生成一个double类型的临时变量来存储,然后再赋值给d!
发生类型转换,会生成一个临时变量,这个临时变量具有常性!
编译器显示出来的是只调用了构造函数,如何证明还调用拷贝构造函数了呢?
在这里插入图片描述
而这里的引用是引用3,3是int类型,他无法从int类型转换为A&类型,所以可以知道它在这过程中是发生隐式类型转换,并且调用它的拷贝构造的!由于其中生成的临时变量具有常性,它不可被修改,可以加const修饰 const A& a3 = 3;编译器直接给它优化了,原本构造+拷贝构造直接优化为构造去了!但是如果不想发生隐式类型转换可以在构造函数之前加explicit。

匿名对象

匿名对象就是对象在定义的时候没有显式写出名字,它和有名对象有区别!匿名对象是临时的,即用即销毁!它具有常性,不能被直接引用!要引用时,前面要加const修饰!

class B
{
public:
	B(int a= 1)
		:_b(a)
	{
		cout << "B(int a= 1)" << endl;
	}

	void Print()
	{
		cout << _b << endl;
	}

	~B()
	{
		cout << "~B()" << endl;
	}
private:
	int _b;
};

int main()
{
	B b1;
	B();

	B().Print();
	b1.Print();

	B b2 = B(2);
	b2.Print();

	//B& b3 = B(3);//匿名对象是临时的,即用即销毁!它具有了常性,不能被引用!

	
	const B& b4 = B(4);
	b2.Print();
	return 0;
}

即用即销毁
在这里插入图片描述
在这里插入图片描述

并且加了const修饰之后,这个匿名对象它的生命周期延长了,知道它定义所在当前函数作用域结束它的生命周期才结束!
向类BB中尾插字符串,可以将其字符串构造出来,调用这个有名对象,或者直接定义匿名对象,又或者隐式类型转换!

class BB
{
public:
	void push_back(const string& str)//string是管理字符串的类
	{
		cout << "void push_back(const string& str):"<<str << endl;
		
	}
};

int main()
{
	BB b;
	string str("hello");
	b.push_back(str);//有名对象
	b.push_back(string("hello"));//匿名对象
	b.push_back("hello");//隐式类型转换

	return 0;


}

在这里插入图片描述

拷贝+构造----->构造

class C
{
public:
	C()
	{
		cout << "C()" << endl;
	}

	C(const C& c)
	{
		cout << "C(const C& c)" << endl;
	}

	~C()
	{
		cout << "~C()" << endl;
	}
};

C fun()
{
	C c1;
	return c1;

}

C& Fun()
{
	static C c1;
	return c1;
}

int main()
{
	
	C cc = fun();
	return 0;
}

在这里插入图片描述
来看一下这一段代码,这个c1对象是在fun中定义的,它返回时会拷贝给生成的一个临时对象
在这里插入图片描述
然后这个生成的临时对象再拷贝给cc,它经历了两次拷贝,但是编译器将其优化了,只调用了一次构造!同一行之中,它会优化为一次构造,但是如果分两行写
在这里插入图片描述
那么他就会是两次拷贝了!所以一般是将其写在一行,减少拷贝次数!因为写在两行,它是先定义出来,然后再拷贝给它,定义的时候调用了一次构造!
🆗就到这了

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

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

相关文章

4. QT环境下使用OPenCV(视频或摄像头读取显示在QLabel控件上)

1. 说明 在用opencv处理图像时,图像的来源大部分情况下是从视频中读取过来的,视频可以是本地保存的视频,也可以是本地摄像头或者网络摄像头实时拍摄的视频。 效果展示: opencv读取视频 2. 具体操作 关于视频的读取,实际上也是从视频中将每一帧图像加载后,显示到QLabel…

【数据可视化方案分享】电商数据分析

本文所分享的电商数据分析报表均来自奥威BI软件的电商数据分析方案&#xff01;该方案是一套包含数据采集、数据建模、数据分析报表的系统化、标准化数据分析方案&#xff0c;下载套用&#xff0c;立见效果&#xff01; 注意&#xff0c;奥威BI软件的电商数据分析方案分两类&a…

Elasticsearch Global Ordinals

用于减少字符串字段 fielddata 内存使用的技术之一称为序数&#xff08;ordinals&#xff09;。想象一下&#xff0c;我们有十亿个文档&#xff0c;每个文档都有一个状态字段。 只有三种状态&#xff1a;status_pending、status_published、status_deleted。 如果我们要在内存中…

Ubuntu离线安装Telnet服务

通过ssh上传telnet包&#xff0c;下载地址&#xff1a;telnet-0.17-41.2build1-amd64资源-CSDN文库 解压telnet包&#xff1a; tar -xzvf telnet_0.17-41.2build1_amd64.tar.gz 安装telnet服务&#xff1a; dpkg -i telnet_0.17-41.2build1_amd64.deb 安装完毕&#xff0c;测…

2023第三届中国RPA+AI开发者大赛圆满收官获奖名单公示

6月26日&#xff0c;历时三个月的2023「第三届中国RPAAI开发者大赛」在苏州国际博览中心圆满收官。本次大赛以“探索创新智能融合”为主题&#xff0c;旨在寻找并推动中国RPA和AI领域的创新人才和前沿技术。云集来自各大行业与领域的企业、高校等326支优秀团队&#xff0c;共计…

chatgpt赋能python:Python读取xlsx中的超链接

Python读取xlsx中的超链接 xlsx是一种常用的电子表格文件格式&#xff0c;在日常的工作生活中经常使用。xlsx文件中可以包含超链接&#xff0c;作为文件中数据的补充和扩展。而Python作为一门强大的编程语言&#xff0c;可以帮助我们轻松读取xlsx文件中的超链接&#xff0c;进…

HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(一)

一、UIAbility组件概述1.概述 UIAbility组件是一种包含UI界面的应用组件&#xff0c;主要用于和用户交互。 UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口&#xff1b;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实…

督查督办管理系统新旧时代

旧时代&#xff1a; 传统的督办主要是通过督办人员现场调查催办、电话催办提交工作进展情况等方法&#xff0c;加上市面上的成品型督办系统功能固化&#xff0c;无法根据企业个性化业务需求灵活调整&#xff0c;所以在工作督办上存在诸多不足。 数据管理滞后&#xff0c;效率不…

【ASP技术】web杂谈(1)之什么是ASP?

涉及知识点 什么是 ASP&#xff0c;Request和Response的介绍&#xff0c;Application和session的详细讲解&#xff0c;ASP的特点&#xff0c;ASP的编程环境&#xff0c;ASP内嵌对象&#xff0c;Asp的应用范例。深入了解ASP技术。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码…

npm install执行报错:ENOENT: no such file or directory, open ‘XXXXX\package.json‘

执行 npm install 报错 解决办法&#xff1a; 先执行 npm init -f 再安装 npm install

使用Python+Flask+HTML写一个测试小工具

背景&#xff1a; 由于公司安全规范限制&#xff0c;我司的测试、预发布、灰度、生产环境&#xff0c;接口间的数据通信通常是加密处理的&#xff0c;给我们日常定位缺陷带来了一定的阻碍&#xff0c;因此我决定使用Python写一个工具&#xff0c;将加密数据转换为正常数据&…

vscode面板菜单字体太大或者太小解决方式【自留记录】

vscode面板菜单字体太大或者太小解决方式【自留记录】 菜单图标 - 设置 - 搜索栏输入 zoom - 输入 0 回车

jasny-bootstrap组件-文件上传

今天和大家分享jasny-bootstrap如何实现文件上传&#xff0c;以及同form表单同时提交处理。 目前各大网站关于jasny-bootstrap上传文件的案例demo少之又少&#xff0c;就连若依也只是一笔带过&#xff0c;只是做了一个纯效果展示。 经过博主的一番查阅文档&#xff0c;查找案例…

【Android安全】Flutter app逆向

使用《Flutter逆向助手》逆向Flutter app 参考&#xff1a;https://www.bilibili.com/video/BV1SM41147g5 flutter app特征&#xff1a; lib/armeabi-v7a/下面有libapp.so和libflutter.so 逆向分析工具&#xff1a; 看雪&#xff1a;Flutter逆向助手 可以解析libapp.so文件…

OpenCV——《直方图操作》和《模版匹配》

1.直方图均衡化 img cv2.imread(clahe.jpg,0) plt.hist(img.ravel(),256) plt.show() #旨在使得图像整体效果均匀&#xff0c;黑与白之间的各个像素级之间的点更均匀一点。 equ cv2.equalizeHist(img) plt.hist(equ.ravel(),256) plt.show() #进行对比&#xff0c;均值化之后…

mapbox图层层级问题

如果在项目之初我们没有设计好图层的问题&#xff0c;那么大概率我们会与到预期图层在别的图层下面的问题&#xff0c;这是需要使用addlayer、movelayer方法来调整图层的位置了。 一般而言先添加的图层在显示的时候在后添加图层的下面&#xff0c;例如下面的代码&#xff1a; …

ChatGPT伪原创文章的应用与发展

ChatGPT是一种基于人工智能技术的自然语言处理模型&#xff0c;它能够生成逼真的、具有上下文连贯性的文本。近年来&#xff0c;ChatGPT在各个领域的应用越来越广泛&#xff0c;其发展潜力也逐渐被人们所认识。本文将从多个方面对ChatGPT的应用与发展进行详细阐述。 ChatGPT在…

人脸考勤签到进阶篇

目录 签到业务流程说明 一、需求介绍 二、如何获取地理信息&#xff1f; 三、如何判定某地区新冠疫情的风险等级&#xff1f; 开通腾讯位置服务 二、腾讯位置服务SDK 把定位坐标转换成真实地址 一、获取定位坐标 uni.authorize(OBJECT) 二、编辑签到页面 在Docker中…

如何在 Spring Boot 中使用反向代理

如何在 Spring Boot 中使用反向代理 介绍 在分布式系统中&#xff0c;反向代理是一项非常重要的技术。通过反向代理&#xff0c;可以将客户端的请求转发到后端的多台服务器上&#xff0c;实现负载均衡和故障转移等功能。本文将介绍如何在 Spring Boot 应用中使用反向代理。 环…

微信小程序判断用户是否授权定位

1、判断用户是否授权定位 checkLocationAuth() {let that thiswx.getSetting({success: (res) > {let authSetting res.authSettingif (authSetting[scope.userLocation]) {that.getCurrentLocation()} else if (authSetting[scope.userLocation] false) {wx.showModal(…