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

【CPP】定义一个类

一:当实现一个类的时候,编译器都做了什么

前言:当我们实现一个类的时候,编译器为我们做了什么;在对类进行操作的时候,有哪些特殊的成员函数可以帮助我们更好的操纵类;

class A {A();//默认构造函数A(const A&);//拷贝构造函数A& operator=(const A&);//拷贝赋值运算符~A();//析构函数int IntNum;
}

1.1 空类

class A {}

(1)默认构造函数

初始化对象的非static数据成员

(2)默认合成析构函数

销毁对象的非static数据成员

(3)默认合成拷贝构造函数

依次将每个非static成员拷贝到正在创建的对象中
(即使已经定义其他构造函数,编译器也会合成一个拷贝构造函数)

(4)默认合成拷贝赋值运算符

若类未定义自己的拷贝赋值运算符,编译器会为类合成一个。

Note:当我们需要自定义一个类的析构函数的时候,几乎可以肯定它也需要自定义一个拷贝构造函数和拷贝赋值运算符

(5)this指针

二:类中特殊的函数

2.1 类的对象在“拷贝,移动,赋值,销毁”时,做了什么

string str1(10,'.'); //直接初始化
string str2(str1); //直接初始化
string str3 = str1; //拷贝初始化
string str4 = "123456789"; //拷贝初始化
string str5 = string(10, '.'); //拷贝初始化
/*
直接初始化要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数
拷贝初始化要求编译器将右侧运算对象拷贝到正在创建的对象中,需要时进行类型转换
*/
void fun1(string s);
fun1(str1);//拷贝初始化:将一个对象作为实参传递给一个非引用类型的形参
string fun2();
string str6 = fun2();//拷贝初始化:从一个返回类型为非引用类型的函数返回对象
struct DATA{
int intNum;
string strNum;
}
DATA data1 = {1,"12345678"};//拷贝初始化:用花括号列表初始化一个数组中的元素或一个聚合类中的成员
/*
当初始化标准库容器或是调用其insert或push成员时,容器会对其元素进行拷贝初始化,
与之相对,用emplace成员创建的元素都进行直接初始化
*/
vector<int> VecNum1;
VecNum1.push_back(1);//拷贝初始化
VecNum1.emplace_back(1);//直接初始化
vector<int> VecNum2;
VecNum2.insert(VecNum2.end(), VecNum1.begin(), VecNum1.end());//拷贝初始化

(1)拷贝构造函数

(2)移动构造函数

/*
使用方法:	1.使用std:move()的标准库函数2.使用定义了“移动构造函数”的标准库类
*/
A::A(A &&a) noexcept//移动操作不应该抛出异常,避免为了处理这种可能性而带来额外的操作
: IntNum(a.IntNum)//接管a中的资源
{//a进入析构状态
}
/*
移动构造函数不申请新内存
*/

(3)拷贝赋值运算符

(4)移动赋值运算符

A& A::operator =(A && a) noexcept 
{//释放原有资源//接管资源//移后源对象可析构
}

相关文章:

【CPP】定义一个类

一&#xff1a;当实现一个类的时候&#xff0c;编译器都做了什么 前言&#xff1a;当我们实现一个类的时候&#xff0c;编译器为我们做了什么&#xff1b;在对类进行操作的时候&#xff0c;有哪些特殊的成员函数可以帮助我们更好的操纵类&#xff1b; class A {A();//默认构造…...

谷歌广告投放步骤流程是什么?一文带你全方位了解实操细节

谷歌&#xff0c;大家都不陌生吧&#xff0c;一个人们很常用的搜索引擎。而谷歌还可以打广告&#xff0c;即谷歌广告&#xff0c;那这跟跨境电商有什么关心呢&#xff1f;东哥告诉大家&#xff0c;关系大了去了&#xff0c;毕竟如果用户搜索与我们相关的关键词&#xff0c;就有…...

TypeScript 怎么去查找类型定义的?

TypeScript 怎么去查找类型定义的&#xff1f;类型文件分类第三方库的类型自定义类型结论类型文件分类 我们项目中的类型文件分为两种&#xff1a;一类是第三方库的类型&#xff0c;一类是在项目中的自定义类型。 第三方库的类型 &#xff08;1&#xff09;Jquery&#xff1…...

NPM包管理器

文章目录一、NPM包管理器1、简介2、安装NPM3、使用npm管理项目3.1项目初始化3.2修改npm镜像3.3 npm install命令的使用3.4其它命令一、NPM包管理器 1、简介 什么是NPM NPM全称Node Package Manager&#xff0c;是Node.js包管理工具&#xff0c;是全球最大的模块生态系统&…...

IT英语记录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1、Classification2、Logistic Regression3、网络相关3.1 WAN&#xff08;Wide Area Network&#xff09;、LAN&#xff08;Local Area Network&#xff09;网络…...

SRS4.0 源码分析- RTC模块相关类

前言 本文介绍SRS4.0涉及RTC模块的C类&#xff0c;主要包括RTC Server和Session相关的。 SrsGoApiRtcPlay 处理webrtc client的播放请求&#xff0c;解析client的offer&#xff0c;并且生成server的answer&#xff0c;并且为这次请求创建一个session。SrsRtcServer 监听udp端…...

数位DP

数位dp的题目一般会问&#xff0c;某个区间内&#xff0c;满足某种性质的数的个数。 利用前缀和&#xff0c;比如求区间[l,r]中的个数&#xff0c;转化成求[0,r]的个数 [0,l-1]的个数。利用树的结构来考虑&#xff08;按位分类讨论&#xff09; 1081. 度的数量 #include<…...

剑指offer(一)-链表

&#xff08;一&#xff09;找出链表的环的入口结点 JZ23 链表中环的入口结点 中等 通过率&#xff1a;36.78% 时间限制&#xff1a;1秒 空间限制&#xff1a;64M 知识点链表哈希双指针 描述 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点…...

CDH大数据平台入门篇之搭建与部署

一、CDH介绍 1.CDH 是一个强大的商业版数据中心管理工具 提供了各种能够快速稳定运行的数据计算框架&#xff0c;如Spark&#xff1b; 使用Apache Impala做为对HDFS、HBase的高性能SQL查询引擎&#xff1b; 使用Hive数据仓库工具帮助用户分析数据&#xff1b; 提供CM安装HBas…...

Spark Join

Spark Join关联形式内关联外关联左外关联右外关联全外关联左半/逆关联关联机制NLJSMJHJ分发模式Join 选择等值 Join不等值 JoinJoin 按照关联形式&#xff08;Join Types&#xff09;划分 : 内关联、外关联、左关联、右关联 Join 按实现机制划分 : NLJ (Nested Loop Join) 、S…...

数字的转化规则?

数字的转化规则&#xff1f;js将字符串转换为数字的方式有哪些&#xff1f;1. 使用 parseInt()2. 使用 Number()3. 使用一元运算符 ()4.使用parseFloat()5. 使用 Math.floor()和Math.ceil()6.乘以数字7. 双波浪号 (~~) 运算符其它值到数字的转化规则1.Undefined 类型2.Null 类型…...

MySQL面试题-锁相关

目录 1.MySQL 锁的类型有哪些呢&#xff1f; 2.如何使用全局锁 3.如果要全库只读&#xff0c;为什么不使用set global readonlytrue的方式&#xff1f; 4.表级锁和行级锁有什么区别&#xff1f; 5.行级锁的使用有什么注意事项&#xff1f; 6.InnoDB 有哪几类行锁&#xff…...

Windows 终端编译 C代码

E:\My_SoftWare\Window gcc\windowbianji\mingw64\bin 此电脑--》属性--》系统--》高级系统设置--》环境变量--》Path--》新建--》粘贴路径 E:\My_SoftWare\Window gcc\windowbianji\mingw64\bin 打开命令终端 E: 回车 dir 显示所有文件 cd E:\My_SoftWare\Window gcc\C_co…...

SpringCloud:Feign的使用及配置

目录 Feign的使用及配置 1、Feign替代RestTemplate 2、使用Fegin步骤 3、自定义配置 4、Feign使用优化 5、Feign的最佳实践方式 Feign的使用及配置 1、Feign替代RestTemplate RestTemplate方式远程调用的问题 问题&#xff1a; 1、代码可读性差&#xff0c;编程体验不同…...

Parquet学习与使用之BloomFilter的应用

写在前面 最近在自己做自定义的OLAP系统&#xff0c;文件格式上用的是Parquet&#xff0c;但是发现Parquet各个API的示例代码很少。所以就打算把这个系列的文章写一下。 1. Parquet的Filter Parquet的过滤支持两大类&#xff0c;一类是基于Footer中的元数据进行RowGroup级别…...

95%置信区间计算-理解

机器学习中做多次试验后&#xff0c;需要计算指标的95%置信区间。 假设做了10次试验&#xff0c;计算得出的某指标分别为{x1,…,x10} 其均值为μ(x1...x10)/10\mu(x1 ... x10)/10μ(x1...x10)/10 方差σ∑(xi−μ)2/10\sigma\sum(x_i -\mu)^2/10σ∑(xi​−μ)2/10 95%置信…...

深度学习pytorch实战三:VGG16图像分类篇自建数据集图像分类三类

1.自建数据集与划分训练集与测试集 2.模型相关知识 3.model.py——定义AlexNet网络模型 4.train.py——加载数据集并训练&#xff0c;训练集计算损失值loss&#xff0c;测试集计算accuracy&#xff0c;保存训练好的网络参数 5.predict.py——利用训练好的网络参数后&#xff0c…...

2023年3月软考高项(信息系统项目管理师)报名走起!!!

信息系统项目管理师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资…...

模电学习11 运算放大器学习入门

一、基本概念 运算放大器简称运放&#xff0c;是一种模拟电路实现的集成电路&#xff0c;可以对信号进行很高倍数的放大。一般有正相输入端、反相输入端、输出端口、正电源、负电源等接口。 运放可工作在饱和区、放大区&#xff0c;其中放大区极其陡峭&#xff0c;因为运放的放…...

spring学习3.5

Bean是什么 Spring里面的Bean就类似是定义的一个组件&#xff0c;而这个组件的作用就是实现某个功能的&#xff0c;这里所定义的Bean就相当于给了你一个更为简便的方法来调用这个组件去实现你要完成的功能。 IoC是什么 谁控制谁&#xff0c;控制什么&#xff1f; 传统Java SE程…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...