C++构造函数和析构函数

C++构造函数和析构函数

  C++的构造函数和析构函数是类的特殊成员函数,用于对象的创建和销毁,分别在对象的生命周期开始和结束时自动调用。它们的使用对资源管理和对象的初始化/清理至关重要。


1. 构造函数

定义
  • 构造函数在对象创建时自动调用,用于初始化对象的数据成员。
  • 构造函数的名字与类名相同,没有返回值。
特点
  1. 无返回值(即使写void也会报错)。
  2. 可以重载:支持多个构造函数,通过参数列表区分。
  3. 默认构造函数:如果没有定义构造函数,编译器会生成一个默认构造函数。
  4. 隐式调用与显式调用:构造函数可以通过隐式或显式方式调用。
语法
class MyClass {
public:MyClass() { // 默认构造函数std::cout << "Default Constructor called!" << std::endl;}MyClass(int x) { // 参数化构造函数std::cout << "Parameterized Constructor called with value " << x << std::endl;}
};int main() {MyClass obj1;        // 调用默认构造函数MyClass obj2(10);    // 调用参数化构造函数MyClass obj3 = MyClass(20); // 显式调用构造函数return 0;
}
类型
  1. 默认构造函数
    • 无参数或所有参数都有默认值。
    MyClass() {}
    
  2. 参数化构造函数
    • 带参数,用于灵活初始化对象。
    MyClass(int x, int y) {}
    
  3. 拷贝构造函数
    • 通过同类型对象初始化新对象,参数是同类的引用。
    MyClass(const MyClass& obj) {}
    
  4. 移动构造函数
    • 用右值引用初始化对象,提升性能。
    MyClass(MyClass&& obj) noexcept {}
    
  5. 委托构造函数(C++11)
    • 一个构造函数调用另一个构造函数。
    MyClass() : MyClass(0) {}
    
初始化列表

  构造函数使用初始化列表可以高效地初始化数据成员,特别是常量、引用类型或需要自定义构造的成员。

  • 成员变量的初始化顺序与它们在类中声明的顺序一致,而不是在初始化列表中出现的顺序。即使在初始化列表中以不同顺序指定初始化,成员变量的初始化仍按照它们在类中的声明顺序进行。
  • const 成员变量必须在对象构造时初始化,因为它们一旦初始化后就不能被修改。由于这种特性,const 成员变量的初始化只能通过构造函数的初始化列表实现,不能在构造函数体内赋值。
class 

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

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

相关文章

根据Cortex-M3(STM32F1)权威指南讲解MCU内存架构与如何查看编译器生成的地址具体位置

首先我们先查看官方对于Cortex-M3预定义的存储器映射 1.存储器映射 1.1 Cortex-M3架构的存储器结构 内部私有外设总线&#xff1a;即AHB总线&#xff0c;包括NVIC中断&#xff0c;ITM硬件调试&#xff0c;FPB, DWT。 外部私有外设总线&#xff1a;即APB总线&#xff0c;用于…

软件设计师“测试用例”考点分析——求三连

一、测试用例设计核心要点解析 1. 白盒测试覆盖标准 &#xff08;1&#xff09;路径覆盖&#xff1a;需覆盖程序中所有可能的路径。如2018年真题路径覆盖需要3组测试用例&#xff08;①②、①③、①③④&#xff09;&#xff0c;2020年流程图则需4个用例覆盖ace/abd/abe/acd四…

Linux 用户无法远程连接服务器

前言 昨天深夜一点多接到客户电话&#xff0c;客户说OS用户下午下班前还能正常登录。因为晚上一点半需要关闭所有服务进行迁移&#xff0c;但是用户无法登录了&#xff0c;导致后续流程无法执行。我让他先通过root用户紧急修改了密码&#xff0c;先保证业务正常流转。 问题 …

多模态大语言模型arxiv论文略读(八十八)

MammothModa: Multi-Modal Large Language Model ➡️ 论文标题&#xff1a;MammothModa: Multi-Modal Large Language Model ➡️ 论文作者&#xff1a;Qi She, Junwen Pan, Xin Wan, Rui Zhang, Dawei Lu, Kai Huang ➡️ 研究机构: ByteDance, Beijing, China ➡️ 问题背景…

svn迁移到git保留记录和Python字符串格式化 f-string的进化历程

svn迁移到git保留记录 and Python字符串格式化(二&#xff09;&#xff1a; f-string的进化历程 在将项目从SVN迁移到Git时&#xff0c;保留完整的版本历史记录非常重要。下面是详细的步骤和工具&#xff0c;可以帮助你完成这一过程&#xff1a; 安装Git和SVN工具 首先&#…

springboot配置mysql druid连接池,以及连接池参数解释

文章目录 前置配置方式参数解释 前置 springboot 项目javamysqldruid 连接池 配置方式 在 springboot 的 application.yml 中配置基本方式 # Druid 配置&#xff08;Spring Boot YAML 格式&#xff09; spring:datasource:url: jdbc:mysql://localhost:3306/testdb?useSSL…

vue实现高亮文字效果——advanced-mark.js

组件介绍-advanced-mark.js&#xff1a; advanced-mark.js 是一个用于 Vue 的高亮文字组件&#xff0c;它可以帮助你在文本中高亮显示指定的关键词或短语。 组件地址&#xff1a;https://angezid.github.io/advanced-mark.js/doc-v2/getting-started.html 主要功能&#xff1…

DC30V/2.5A同步降压芯片SL1581 输入24V降压5V 12V2A电流

在工业自动化、汽车电子等领域&#xff0c;24V 电源系统向 5V/12V 双轨供电的需求日益增长。针对这一痛点&#xff0c;森利威尔电子重磅推出 DC30V/2.5A 同步降压芯片 SL1581&#xff0c;凭借卓越的性能和创新设计&#xff0c;为工程师提供高可靠性、高性价比的电源解决方案。 …

React 第四十四节Router中 usefetcher的使用详解及注意事项

前言 useFetcher 是 React Router 中一个强大的钩子&#xff0c;用于在不触发页面导航的情况下执行数据加载&#xff08;GET&#xff09;或提交&#xff08;POST&#xff09;。 一、useFetcher 应用场景&#xff1a; 1、后台数据预加载&#xff08;如鼠标悬停时加载数据&…

Jmeter(三) - 测试计划(Test Plan)的元件

1.简介 上一篇已经教你如何通过JMeter来创建一个测试计划&#xff08;Test Plan&#xff09;&#xff0c;那么这一篇我们就将JMeter启动起来&#xff0c;创建一个测试计划&#xff08;Test plan&#xff09;&#xff0c;给大家介绍一下测试计划&#xff08;Test Plan&#xff…

应届本科生简历制作指南

一、找一个专业的简历模板 首先&#xff0c;你需要访问 Overleaf 的官方网站&#xff0c;也就是Overleaf, Online LaTeX Editor&#xff0c;进入页面后&#xff0c;点击注册按钮&#xff0c;按照提示填写相关信息来创建一个属于自己的账号&#xff0c;通常需要填写用户名、邮箱…

[Spring Boot]整合Java Mail实现Outlook发送邮件

日常开发过程中,我们经常需要使用到邮件发送任务,比方说验证码的发送、日常信息的通知等。日常比较常用的邮件发送方包括:163、QQ等,本文主要讲解Outlook SMTP的开启方式、OutLook STARTTTL的配置、如何通过JavaMail来实现电子邮件的发送等。 Outlook作为微软提供的企业电子…

【YOLOs-CPP-图像分类部署】03-解决报错

完整项目链接 点击here下载! 上一篇问题 经过上一篇博客,我们得到了一个粗略版(会报错)的项目。如何解决异常报错呢? 我把问题在github上对作者进行了提问,但是2天后,依然没有回复。 怎么办呢?只能自己调试代码了。 修改代码 经过大量调试,修改了YOLO11CLASS.h…

Dockers Compose常用指令介绍

Dockers Compose常用指令 1、常用指令介绍 1.1、version 指令 顶级一级指令&#xff0c;指定 compose 指定文件格式版本 version: "3.8" services: 不同版本支持的功能不同。常用版本有 ‘2’, ‘3’, ‘3.8’ 等。 1.2、services 指令 顶级一级指令&#xff0…

谢飞机的Spring WebFlux面试之旅:从基础到深入

谢飞机的Spring WebFlux面试之旅&#xff1a;从基础到深入 面试场景&#xff1a;谢飞机的WebFlux面试 面试官&#xff1a;你好&#xff0c;谢飞机&#xff0c;请介绍一下你自己。 谢飞机&#xff1a;您好&#xff0c;我是一名有三年开发经验的Java程序员&#xff0c;熟悉Spr…

Mysql增量备份与恢复

1.练习数据增量备份 增量备份&#xff1a;备份上次备份后&#xff0c;新产生的数据。 PERCONA Xtrabackup是一款强大的在线热备份工具&#xff0c;备份过程中不锁库表&#xff0c;适合生产环境。支持完全备份与恢复、增量备份与恢复、差异备份与恢复。 安装Xtrabackup 150、…

GStreamer (三)常⽤插件

常⽤插件 1、Source1.1、filesrc1.2. videotestsrc1.3. v4l2src1.4. rtspsrc和rtspclientsink 2、 Sink2.1. filesink2.2. fakesink2.3. xvimagesink2.4. kmssink2.5. waylandsink2.6. rkximagesink2.7. fpsdisplaysink 3 、视频推流/拉流3.1. 本地推流/拉流3.1.1 USB摄像头3.1…

Spring Boot与Kafka集成实践:实现高效消息队列

Spring Boot与Kafka集成实践 引言 在现代分布式系统中&#xff0c;消息队列是实现异步通信和解耦的重要组件。Apache Kafka作为一种高性能、分布式的消息队列系统&#xff0c;被广泛应用于大数据和实时数据处理场景。本文将介绍如何在Spring Boot项目中集成Kafka&#xff0c;…

Linux PXE批量装机+无人值守技术(自动化装机)

目录 PXE所需条件 服务端所需服务 客户端所需功能 1.准备系统安装rpm仓库 (1)安装vsftpd服务 (2)启动并设置开机自启 (3)准备yum仓库文件 2.安装配置dhcpd服务 (1)安装dhcoo软件包 (2)配置dhcp服务 (3)启动并设置开机自启 3.部署TFTP服务 (1)安装软…

linux_cmake的笔记

include_directories()的使用 今天在运行一个cmakelist.txt如下所示时候&#xff0c;发现一个问题&#xff1a; cmake_minimum_required(VERSION 3.28) project(l_trajectoryError CXX) option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF) find…