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

CPP从入门到入土之类和对象Ⅱ

一、六大默认成员函数

默认成员函数是用户没有显式实现,编译器自动生成的成员函数。
一个类,我们在不写的情况下,编译器会默认生成六个默认成员函数
在这里插入图片描述
本文详细介绍构造函数和析构函数

二、构造函数

构造函数虽名为构造函数,但是这个函数并不开辟空间创建对象(经常使用的局部对象是栈帧创建的)
构造函数的功能是:在对象实例化时初始化对象,类似于我们以前写的Init()函数
CPP引入构造函数,我们也就可以代替Init()函数了

构造函数的特点:

  • 函数值与类名相同
class Info{
public:
// 构造函数Info(){//...}
private:
//...
};
  • 无返回值(啥都不需要给,void也不用)
  • 对象实例化时(创建对象)系统会自动调用对应的构造函数
  • 支持重载,可以根据参数不同定义多个构造函数
  • 如果没有显式定义构造函数,CPP的编译器会自动生成一个无参的默认构造函数,一旦显式定义就不会生成

构造函数的类型

  1. 默认构造函数
    默认构造函数分为无参构造函数编译器自动生成的构造函数全缺省构造函数
    这三个函数有且只能存在一个:
    在这里插入图片描述

无参构造函数和 全缺省构造函数虽能构成函数重载,但是会产生调用歧义
总结一下: 默认构造函数是不用传实参的构造函数

class Info {
public:// 无参的默认构造函数Info() {_name = "UnKnow";_age = 0;}void Print() {cout << " 默认构造函数被调用" << endl;cout << _name << "  " << _age << endl;}
private:string _name;int _age;
};int main() {Info I1;I1.Print();
}

在这里插入图片描述

  1. 带参数的构造函数
class Info {
public:// 带参的构造函数Info(string name, int age) {_name = name;_age = age;}void Print() {cout << " 默认构造函数被调用" << endl;cout << _name << "  " << _age << endl;}
private:string _name;int _age;
};int main() {// 调用带参数的构造函数Info I2("kunkun", 18);I2.Print();
}

在这里插入图片描述

编译器自动生成的默认构造函数深度剖析

我们如果没有显式定义构造函数,编译器自动生成的构造函数会将对象初始化成什么呢?
类型的分类:
在这里插入图片描述

  • 内置类型:没有规定要处理(可处理可不处理,看编译器类型)
    在这里插入图片描述

  • 自定义类型:调用自定义类型对象的默认构造函数,本质是不断套娃,深挖!!!

在这里插入图片描述
分析一下:

D1这个对象中有三个内置类型成员变量和一个自定义类型成员变量,不写构造函数,首先自动生成Date()的默认构造函数,到private中发现三个内置类型,则不做处理,有个自定义类型_t,则去调用Time()的构造函数,发现有构造函数,则按照构造函数初始化命令初始化,如果Time()没有构造函数呢?那么_hour _minute _second也是内置类型,不做处理

在这里插入图片描述
注意:没有默认构造函数会报错
在这里插入图片描述

三、析构函数

析构函数构造函数功能相反,析构函数不是销毁对象,比如局部对象存在栈中,函数栈帧结束就自动销毁释放内存。
析构函数的功能是在对象销毁时完成对象中资源的清理释放
析构函数的功能类似于Destroy(),析构函数就可以完美替代Destroy()

析构函数的特点

  • 无参数无返回值,与构造函数类似
  • 函数名与类名相同,在类名前加字符 “~” eg:Name()
  • 一个类只能有一个析构函数,所以析构函数不能重载如果没有显式定义,系统会自动生成默认的析构函数
  • 对象生命周期结束,会自动调用析构函数
  • 与构造函数相同,编译器自动生成的析构函数对内置类型不做处理,对自定义类型则会调用它的析构函数
    注意:我们显式写析构函数,自定义类型成员会调用它的析构函数,换句话说,自定义类型成员无论什么情况下都会调用析构函数

析构函数的语法

class Test {
public:Test() {cout << "构造函数调用成功" << endl;}~Test() {cout << "析构函数调用成功" << endl;}
private:
};int main() {cout << "程序开始运行" << endl;{Test T;// 构造函数被调用}// T生命周期结束cout << "程序运行结束";
}

在这里插入图片描述
总结:

  • 有资源需要手动清理,需要写析构函数
  • 有两种场景不需要写析构函数,利用默认生成的即可:
    1. 没有资源需要清理,例如:Date()日期列表全是局部成员
    2. 内置类型没有资源需要清理,剩下的全是自定义类型成员,且这些类有正确的析构函数 eg:
public:Engine() { std::cout << "Engine created.\n"; }~Engine() { std::cout << "Engine destroyed.\n"; }
};class Car {
public:Engine engine;int speed;
}; // Car的析构函数不需要手写

相关文章:

CPP从入门到入土之类和对象Ⅱ

一、六大默认成员函数 默认成员函数是用户没有显式实现&#xff0c;编译器自动生成的成员函数。 一个类&#xff0c;我们在不写的情况下&#xff0c;编译器会默认生成六个默认成员函数 本文详细介绍构造函数和析构函数 二、构造函数 构造函数虽名为构造函数&#xff0c;但是…...

2025年 cocosCreator 1.8 定制 JavaScript 引擎

参考文档&#xff1a;https://docs.cocos.com/creator/1.9/manual/zh/advanced-topics/engine-customization.html PS: 1.8的文档已经没了&#xff0c;只能看1.9的&#xff0c;所幸这两个版本差别不大 获取 JS 引擎 原文中github上的分支已经找不到了&#xff0c;这里直接从c…...

「JavaScript深入」Socket.IO:基于 WebSocket 的实时通信库

Socket.IO Socket.IO 的核心特性Socket.IO 的架构解析Socket.IO 的工作流程Socket.IO 示例&#xff1a;使用 Node.js 搭建实时聊天服务器1. 安装 Socket.IO2. 服务器端代码&#xff08;Node.js&#xff09;3. 客户端代码&#xff08;HTML JavaScript&#xff09;4. 房间功能 高…...

turnjs图册翻书效果

npm install https://github.com/igghera/turn.js.git //或者 npm install turn.js //import $ from "jquery"; //记得引入jquery import turn.js; // 引入 Turn.jsimport turn from "/utils/turn.min.js";// 引入 Turn.jsinitBook(length) {var that thi…...

大语言模型的训练数据清洗策略

目录 大语言模型的训练数据清洗策略 1. 数据去重与标准化 问题 解决方案 示例代码&#xff08;Python 实现数据去重&#xff09;&#xff1a; 2. 过滤有害内容 问题 解决方案 示例代码&#xff08;基于关键词过滤有害内容&#xff09;&#xff1a; 3. 纠正数据不均衡 …...

在 Vue 项目中调用 DeepSeek API(示例篇)

在 Vue 项目中调用 DeepSeek(假设 DeepSeek 是一个提供 API 服务的第三方工具,例如用于搜索、数据分析等),通常需要通过 HTTP 请求与 DeepSeek 的 API 进行交互。以下是一个简单的示例,展示如何在 Vue 项目中调用 DeepSeek API。 实例如下: 安装依赖 首先,确保你的项目中…...

对接股票金融数据源API

StockTV 股票市场API StockTV 提供全面的实时和历史股市数据 API&#xff0c;涵盖全球股票、外汇、期货及市场新闻数据&#xff0c;助力投资者精准把握市场动态。 主要功能 实时和历史股市数据 API 获取全球股票市场的实时行情、历史数据及深度分析&#xff0c;支持多语言查询…...

蓝桥杯关于栈这个数据结构的一个算法题目

文章目录 1.题目概述解释2.思路分析3.代码解析 1.题目概述解释 找出来这个字符串里面重复出现的字符&#xff0c;类似于这个消消乐的游戏&#xff1b; 示例一里面的这个bb是连续的并且是一样的这个字符&#xff0c;因此删除bb&#xff0c;删除之后发现这个aa有一次相邻了&…...

SpringBoot配置文件加载优先级

在Spring Boot项目中&#xff0c;配置属性的优先级是一个重要的概念&#xff0c;它决定了当存在多个配置源时&#xff0c;哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级&#xff0c;从最高到最低&#xff1a; 命令行参数&#xff1a; 命令行参数具有最高的优先…...

企业数据治理解决方案(46页PPT)(文末有下载方式)

资料解读&#xff1a;企业数据治理解决方案 详细资料请看本解读文章的最后内容。 在当今数字化时代&#xff0c;数据已成为企业的核心资产&#xff0c;对企业的发展起着至关重要的作用。然而&#xff0c;许多企业在数据管理方面面临诸多挑战&#xff0c;如数据不全、样式繁多、…...

版本控制器Git ,Gitee如何连接Linux Gitee和Github区别

&#x1f4d6; 示例场景 假设你和朋友在开发一个「在线笔记网站」&#xff0c;代码需要频繁修改和协作&#xff1a; 只用本地文件管理 每次修改后手动复制文件&#xff0c;命名为 v1.html、v2.html 问题&#xff1a;无法追踪具体改动内容&#xff1b;多人修改易冲突&#xff1…...

[网安工具] 网安工具库 —— 工具管理手册

0x00&#xff1a;工具管理类 — Tools Management 0x01&#xff1a;信息收集类 — Information Gathering 自动化综合信息收集工具 — ARL 灯塔 0x02&#xff1a;漏洞探测类 — Vulnerability Identification 浏览器渗透辅助插件 —— HackBar 0x03&#xff1a;漏洞利用类…...

在LwIP中,`tcp_recved()`、`tcp_sndbuf()` 和 `tcp_write()`三个函数详细用法及示例

在LwIP中&#xff0c;tcp_recved()、tcp_sndbuf() 和 tcp_write() 是TCP协议栈的核心函数&#xff0c;用于管理接收和发送数据流。以下是它们的详细用法及示例&#xff1a; 1. tcp_recved() 功能 通知协议栈已处理接收数据&#xff1a;当应用层从接收缓冲区读取数据后&#x…...

外卖避雷方案 改进型(个人使用版)

昨天怒花100请教了双尾彗星对外卖避雷的计划。 总结下来是行不通。 1.很容易被水军冲击数据真实性, 1.这种方案是从末端来解决问题,食品卫生问题,最好还是从解决分成方面的问题。 2.这种方案没有解决人们对食品安全的焦虑。 既然这样那只能先弄个只给自己用的避雷程序,打造…...

深度学习与传统算法在人脸识别领域的演进:从Eigenfaces到ArcFace

一、传统人脸识别方法的发展与局限 1.1 Eigenfaces&#xff1a;主成分分析的经典实践 算法原理 Eigenfaces是基于主成分分析&#xff08;PCA&#xff09;的里程碑式方法。其核心思想是将人脸图像视为高维向量&#xff0c;通过协方差矩阵计算特征向量&#xff08;即特征脸&…...

druid开启防火墙之后的bug

bug以及解决方案 不允许执行多个语句不允许有注释部分数据有误识别&#xff0c;抛出异常&#xff0c;导致原本正常执行的语句被中断 解决方案 application.yaml中对于druid配置如下&#xff1a; wall:enabled: true # 开启防火墙config:multi-statement-allow: true # 允许多个…...

代码随想录_动态规划

代码随想录 动态规划 509.斐波那契数 509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n…...

指令系统3(算数运算指令)

一.加法指令&#xff08;ADD&#xff09;&#xff1a; 用于执行 16 位或 32 位的加法运算。 指令格式及功能&#xff1a; ADD Rd, Rm&#xff1a;将寄存器Rd和Rm的值相加&#xff0c;结果存回Rd&#xff0c;即Rd Rd Rm。ADD Rd, Rn, Rm&#xff1a;把寄存器Rn和Rm的值相加&…...

VLLM专题(三十一)—架构概述

本文档提供了vLLM架构的概述。 1. 入口点 vLLM 提供了多个与系统交互的入口点。下图展示了它们之间的关系。 1.1 LLM 类 LLM 类提供了用于进行离线推理的主要 Python 接口,即在不使用单独的模型推理服务器的情况下与模型进行交互。 以下是 LLM 类的使用示例: from vll…...

【操作系统】进程间通信方式

进程间通信方式 前言 / 概述一、管道管道命名管道 二、消息队列三、共享内存四、信号量信号量概述互斥访问条件同步信号 五、socket总结 前言 / 概述 每个进程的用户地址空间都是独立的&#xff0c;⼀般而言是不能互相访问的&#xff0c;但内核空间是每个进程都共享的&#xff…...

Flutter 打包 ipa出现错误问题 exportArchive

一、错误信息: Encountered error while creating the IPA: error: exportArchive: "Runner.app" requires a provisioning profile with the Push Notifications feature. Try distributing the app in Xcode: open /project/your_app/build/ios/archive/Runner.…...

Ubutu20.04安装docker与docker-compose

系统&#xff1a;20.04.6 LTS (Focal Fossa)" 1.配置apt源(在/etc/apt/sources.list中输入以下内容) # deb cdrom:[Ubuntu 20.04.6 LTS _Focal Fossa_ - Release amd64 (20230316)]/ focal main restricted deb http://mirrors.aliyun.com/ubuntu/ focal main restricted …...

Java 反射机制

Java 反射机制 Java 反射机制1. 反射机制简介2. 反射的核心类3. 反射的基本步骤3.1 加载类&#xff0c;获取类的字节码&#xff1a;Class 对象3.2 获取类的构造器&#xff1a;Constructor 对象3.3 获取类的成员变量&#xff1a;Field 对象3.4 获取类的成员方法&#xff1a;Meth…...

前端流式输出实现详解:从原理到实践

前端流式输出实现详解&#xff1a;从原理到实践 前言一、流式输出核心原理1.1 什么是流式输出&#xff1f;1.2 技术优势对比1.3 关键技术支撑 二、原生JavaScript实现方案2.1 使用Fetch API流式处理关键点解析&#xff1a; 2.2 处理SSE&#xff08;Server-Sent Events&#xff…...

CTF题目《easy_tornado》(护网杯 2018)Write Up

题目背景与信息收集 初始访问 题目提供三个文件链接&#xff1a; /flag.txt&#xff1a;提示flag位于/fllllllllllllag文件/welcome.txt&#xff1a;关键词render&#xff0c;暗示模板渲染漏洞&#xff08;SSTI&#xff09;/hints.txt&#xff1a;提示签名算法md5(cookie_secre…...

暗光增强技术研究进展与产品落地综合分析(2023-2025)

一、引言 暗光增强技术作为计算机视觉与移动影像领域的核心研究方向之一,近年来在算法创新、硬件适配及产品落地方面取得了显著进展。本文从技术研究与产业应用两个维度,系统梳理近三年(2023-2025)该领域的关键突破,并对比分析主流手机厂商的影像技术优劣势。 二、暗光增…...

CAM350-14.6学习笔记-1:导入Gerber文件

CAM350-14.6学习笔记-1:导入Gerber文件 使用自动导入器导入Gerber1&#xff1a;导航栏Home下面的Import——Automatic Import——选择文件路径——Next2&#xff1a;设置每层的类型&#xff1a;3&#xff1a;设置叠层4&#xff1a;弹出层别显示框及Gerber显示 按照Allegro输出的…...

【Zephyr】【二】学习笔记【RTOS系统架构】

Zephyr RTOS 系统架构 整体架构 #mermaid-svg-MENZa2zm9JlGktYP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MENZa2zm9JlGktYP .error-icon{fill:#552222;}#mermaid-svg-MENZa2zm9JlGktYP .error-text{fill:#55…...

Web-Machine-N7靶机通关攻略

获取靶机ip arp-scan -l 端口扫描 nmap xxxx 访问80端口发现没用 扫描目录 gobuster dir -u http:/192.168.117.160 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium,txt -x php,html,txt ,zip 打开exploit.html 点击F12&#xff0c;修改localhost为靶机ip&#…...

CSS 用于图片的样式属性

CSS 设置图像样式 CSS中用于图片的样式属性主要包括以下几个方面&#xff1a; ‌边框和背景‌&#xff1a; ‌border‌&#xff1a;可以设置图片的边框样式、宽度和颜色。例如&#xff0c;img { border: 1px solid #ddd; } 会给图片添加1像素的实线边框&#xff0c;颜色为灰色…...

【工具分享】vscode+deepseek的接入与使用

目录 第一章 前言 第二章 获取Deepseek APIKEY 2.1 登录与充值 2.2 创建API key 第三章 vscode接入deepseek并使用 3.1 vscode接入deepseek 3.2 vscode使用deepseek 第一章 前言 deepseek刚出来时有一段时间余额无法充值&#xff0c;导致小编没法给大家发完整的流程&…...

《Java核心三问:字符串、equals()、hashCode()的隐藏雷区与完美避坑手册》

目录 一.String、StringBuffer、StringBuilder的区别&#xff1f;1. 核心区别总结2. 具体实例演示示例1&#xff1a;不可变性 vs 可变性示例2&#xff1a;线程安全验证 2. 线程安全的关键&#xff1a;synchronized3. 对比StringBuilder的非线程安全4. 可视化执行流程5. 进一步验…...

【Java】TCP网络编程:从可靠传输到Socket实战

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…...

背包问题——多重背包(C语言)

代码如下&#xff1a; #include<stdio.h>int knapsack(int weight[], int value[], int count[], int n, int capacity) {int* dp (int*)malloc(sizeof(int) * (capacity 1));for (int i 0; i < capacity; i){dp[i] 0;}for (int i 0; i < n; i)//核心代码{fo…...

微服务》》Kubernetes (K8S) 集群配置网络》》Calico

嘻嘻嘻 以Calico 为例子 Calico官网 官网上有安装Calico插件的步骤 步骤 要在主节点 主节点 主节点 执行 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/tigera-operator.yaml kubectl get pod --all-namespaces kubec…...

寄存器(内部访问)

内存中字的储存 我们之前提到过&#xff0c;字由两个字节组成&#xff0c;当我们用16位寄存器来储存时&#xff0c;把字分别储存在连续的两个内存单元中&#xff0c;高位字节放在高地址单元中&#xff0c;低位字节则放在低位地址单元中。 例如上图&#xff0c;0、1两个单元存放…...

Vue2 watch侦听器(监听器)

watch侦听器&#xff08;监听器&#xff09;功能是监听数据变化&#xff0c;执行一些业务逻辑 或 异步操作。 核心选项 ‌handler‌ 监听函数&#xff0c;接收 (newVal, oldVal) 作为参数。‌deep: true 深度监听对象/数组内部变化。‌immediate: true‌ 在组件创建时…...

【PCB工艺】基础:电子元器件

电子原理图&#xff08;Schematic Diagram&#xff09;是电路设计的基础&#xff0c;理解电子元器件和集成电路&#xff08;IC&#xff09;的作用&#xff0c;是画好原理图的关键。 本专栏将系统讲解 电子元器件分类、常见 IC、电路设计技巧&#xff0c;帮助你快速掌握电子电路…...

linux性能监控的分布式集群 prometheus + grafana 监控体系搭建

prometheusgrafana分布式集群资源监控体系搭建 前言一、安装 prometheus二、在要监控的服务器上安装监听器三、prometheus服务器配置四、grafana配置大屏五、创建Linux监控看板五、监控windows服务器注意事项 前言 Prometheus 是一个开源的 ​分布式监控系统 和 ​时间序列数据…...

Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法

文章目录 前言一、检查网卡是否被识别二、确认内核模块是否可用1.AX200 wifi 要求内核5.12.检查 iwlwifi.ko 是否存在&#xff1a;3.如果未找到&#xff0c;可能是内核模块未正确生成。尝试安装 linux-modules-extra&#xff1a;4.再次检查 iwlwifi.ko 是否存在&#xff1a;5.确…...

LinkedList与链表

ArrayList的缺陷 在上一篇博客中&#xff0c;小编已经较为详细得给大家介绍了ArrayList这个结构了。但是ArrayList存在一些缺陷&#xff1a;由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后搬移&am…...

CCF 编程能力认证 C++ 四级宝典

CCF编程能力等级认证&#xff08;以下简称GESP&#xff09;2025年四次认证时间分别为&#xff1a;3月22日、6月28日、9月27日、12月20日&#xff0c;认证方式为线下机考&#xff0c;认证语言包括&#xff1a;C、Python和Scratch三种语言&#xff0c;其中Scratch认证为一到四级&…...

信创系统极速文件查找:locate 命令详解

原文链接&#xff1a;信创系统极速文件查找&#xff1a;locate 命令详解 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇信创终端操作系统上 locate 命令详解的文章。在 Linux 及信创终端操作系统&#xff08;如 统信 UOS、麒麟 KOS&#xff09;中&#xff0c;查找…...

数据集获取

sklearn数据集 sklearn有四部分数据。其中sklearn的数据集有两部分真实的数据,一部分嵌入到了sklearn库中,即安装好sklearn后就自带了一部分数据,这些数据的规模比较小称为small toy datasets ,还有一部分数据是需要在网上下载的,sklearn提供了下载的api接口,这些数据规…...

三格电子PLC数据采集网关-工业互联的智能枢纽

在工业自动化领域&#xff0c;设备间的数据互通与协议兼容是核心挑战之一。三格电子推出的PLC据采集网关SG-PLC-Private&#xff0c;凭借其多协议兼容、高稳定性和灵活配置能力&#xff0c;成为工业物联网&#xff08;IIoT&#xff09;中实现设备互联的关键设备。本文将从产品功…...

【sgFloatDialog】自定义组件:浮动弹窗,支持修改尺寸、拖拽位置、最大化、还原、最小化、复位

sgFloatDialog <template><div :class"$options.name" v-if"visible" :size"size" :style"style"><!-- 托盘头部 --><div class"header" ref"header" dblclick.stop.prevent"dblclic…...

conda 常用命令

常用 Conda 命令整理环境管理 conda create --name 环境名 &#xff1a;创建新环境 conda activate 环境名 &#xff1a;激活环境 conda deactivate&#xff1a;退出环境 conda env list&#xff1a;列出所有环境 conda remove --name 环境名 --all &#xff1a;删除环…...

神聖的綫性代數速成例題10. N維矢量綫性運算、矢量由矢量組綫性表示、N個N維矢量相關性質

N 維矢量綫性運算&#xff1a; 設&#xff0c;是維矢量&#xff0c;是數。加法&#xff1a;。數乘&#xff1a;。 矢量由矢量組綫性表示&#xff1a; 設是n維矢量&#xff0c;若存在一組數&#xff0c;使得&#xff0c;則稱矢量可由矢量組綫性表示。 N 個 N 維矢量相關性質&…...

力扣977. 有序数组的平方(双指针技巧)

Problem: 977. 有序数组的平方 文章目录 题目描述思路Code 题目描述 思路 由于数组是非递减且包含正、负数&#xff0c;则假如我们将数组中的每一个元素取平方并且将其从原始的某一个位置分开成两个数组来看待&#xff08;一个数组从前往后看&#xff0c;一个数组从后往前看&am…...

单片机flash存储也做磨损均衡

最近在做一个项目&#xff0c;需要保存设置数据&#xff0c;掉电不丢失。那么首先想到的是加个24c02&#xff0c;是一个eeprom&#xff0c;但是客户板太小&#xff0c;没有办法进行扩展。后面就找了一个带ee的OTP单片机&#xff0c;发现擦写次数有限&#xff0c;只有1000次&…...