C++:特殊成员函数

构造函数、析构函数和拷贝构造函数是C++类中的三种特殊成员函数,它们分别用于对象的初始化、清理和拷贝操作。

1.构造函数(Constructor):构造函数在对象创建时自动调用,用于初始化对象的成员变量。它的名称与类名相同,没有返回类型。构造函数可以重载,即同一个类可以有多个构造函数,根据参数的不同进行选择。

class RolePlayer {
public://构造函数RolePlayer(){std::cout << "构造函数" << std::endl;};
};
在main函数中实例化多个对象
int main() {RolePlayer roleA;RolePlayer roleB;RolePlayer roleC;system("pause");retrun 0;
}

运行,查看结果;

构造函数在对象创建时自动调用,一般我们会在构造函数中针对对象的成员变量进行初始化,这个时候就可以对构造函数进行重载,设置带参数的构造函数;

重载(Overloading)是指在一个类中定义多个同名方法,但是它们的参数列表不同,即参数类型、参数个数或者参数顺序不同。在调用这些方法时,编译器会根据传入的参数类型和数量来确定具体调用哪个方法。这种特性可以增加代码的灵活性和可读性。

示例:

class RolePlayer {
public://构造函数RolePlayer(){std::cout << "构造函数" << std::endl;};//带参数的构造函数RolePlayer(int HP){m_nHP = HP;};//获取HP的方法int GetHP() {return m_nHP;}private:char * m_NPCName;int m_nHP;
};

在对象创建时运行带参数的构造函数对对象的m_nHP成员变量进行赋值;

int main() {RolePlayer roleA(44);std::cout << roleA.GetHP() << std::endl;system("pause");return 0;
}

此时对象roleA成员变量在实例化的时候就已经被赋值了。

2.析构函数

析构函数在对象销毁时自动调用,用于释放对象占用的资源,比如内存、文件句柄等。它的名称是在类名前面加上波浪号(~),没有参数和返回类型。通常用于清理对象分配的资源,确保没有资源泄漏。

还是使用RolePlayer类进行示范
class RolePlayer {
public://构造函数RolePlayer(){std::cout << "构造函数" << std::endl;};//析构函数~RolePlayer(){std::cout << "析构函数" << std::endl;};
};

这个时候我们在源文件中使用new创建一个对象,并替对象创建地址空间,接着使用delete释放掉对象的地址空间;

int main() {RolePlayer * pRoleA = new RolePlayer;delete pRoleA;system("pause");return 0;
}

接着运行程序:

可以看到对象的构造函数在创建对象时执行,析构对象在释放对象时执行。

析构函数可以清理对象分配的资源,确保没有资源泄漏。

3.拷贝构造函数(Copy Constructor):拷贝构造函数用于在创建新对象时,以已存在的对象作为参数进行初始化。它通常用于对象的复制或传递。如果不显式定义拷贝构造函数,编译器会提供默认的拷贝构造函数,执行浅复制。

我们还是拿RolePlayer类进行举例

class RolePlayer {
public://一个传入参数的构造函数RolePlayer(int HP){m_nHP = HP;};
​//拷贝构造函数RolePlayer(const RolePlayer & other){m_nHP = other.m_nHP;std::cout << "拷贝构造函数执行成功" << std::endl;}   //获取对象HPint GetHP() {return m_nHP;}private:int m_nHP;
};

此时我先实例化一个对象roleA,接着再创建一个对象roleB,且再创建对象B的时候调用拷贝构造函数进行对象的复制与传递;

int main() {//实例化对象roleARolePlayer roleA(44);//实例化对象roleBRolePlayer roleB(roleA);std::cout << roleB.GetHP() << std::endl;system("pause");return 0;
}

此时我在创建roleA对象时调用其构造函数进行成员初始化,将roleA对象的m_nHP值设置为44,接着实例化对象roleB,且调用拷贝构造函数,将对象A作为拷贝对象进行传入;此时再打印roleB的HP值,结果如下:

可以看到拷贝构造函数执行成功,且roleA对象的属性成功拷贝至roleB。

这三种特殊成员函数在C++中非常重要,它们在对象的生命周期中起着关键作用,确保对象被正确地初始化、清理和复制。

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

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

相关文章

基于大语言模型的本地知识库问答系统构建方案

文章大纲 RAG (Retrive,Augment,Generate)检索增强生成方案简介1. 数据准备阶段2. 应用阶段基于 LangChain 的实现开源实现参考RAG 与其他方案比较知识图谱方案: KG-RAG 表示基于知识图谱的RAG(Retrieval Augmented Generation)检索增强多模态检索结论参考文献与学习路径写…

使用机器学习算法构建问答系统

长时间以来&#xff0c;我一直在阅读关于人工智能和机器学习的多篇文章、一些论文和大量博客文章。最近&#xff0c;神经网络的进步特别引人注目&#xff0c;比如产生类似人类水平文本的 GPT3.5 模型。为了理解使用神经网络进行自然语言处理的最新技术&#xff0c;我想设计一个…

富格林:戒备虚假套路保障安全

富格林悉知&#xff0c;现货黄金是一种传统而又具有吸引力的投资方式&#xff0c;因为它通常被视为一种避险资产。对于投资者来说&#xff0c;特别是新进场的新手投资者戒备虚假套路是保障做单安全的关键之处。那么我们该如何进行戒备虚假套路以达到安全做单的目标呢&#xff1…

React Router 6 + Ant Design:构建基于角色的动态路由和菜单

要根据用户的角色生成不同的路由菜单并实现权限控制,你可以采取以下步骤: 定义路由配置 首先,你需要定义一个包含所有可能路由的配置文件,例如: const routes [{path: /dashboard,element: <DashboardPage />,roles: [admin, manager, user]},{path: /users,element:…

Node.js 基础学习

文章目录 1. Node.js1.1 是什么&#xff1f;1.2 作用 2. 命令行工具2.1 命令的结构2.2 常用命令 3. Node.js 注意点3.1 Node.js 中不能使用DOM 和BOM 的API3.2 Node.js 中顶级对象叫做global 4. Buffer4.1 Buffer 特点4.2 Buffer 创建方式4.3 Buffer 操作与注意点 5. 计算机基础…

CSS基础:浮动(float)的3种方式,清除浮动3种方式的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

【报错】ModuleNotFoundError: No module named ‘einops‘

1 报错 💔💔💔 ModuleNotFoundError: No module named einops 解决方法 💚 💚 💚 pip --default-timeout=100 install einops -i https://pypi.tuna.tsinghua.edu.cn/simple 问题解决啦!!!🌺🌺🌺 2 报错 💔💔💔 ModuleNotFoundError: No module

iOS OC项目中引入SwiftUI文件

iOS OC项目中引入SwiftUI文件 1、创建SwiftUI文件 2、第一次创建时&#xff0c;Xcode会提示桥接&#xff0c;选择 Creat Bridging Header即可。 3、创建swift管理类 /**在UIKit中使用SwiftUI&#xff0c;需要使用UIHostingController对SwiftUI进行包装&#xff0c;返回的是U…

C++11 数据结构7 队列的链式存储,实现,测试

前期考虑 队列是两边都有开口&#xff0c;那么在链式情况下&#xff0c;线性表的链式那一边作为对头好呢&#xff1f; 从线性表的核心的插入和删除算法来看&#xff0c;如果在线性表链表的头部插入&#xff0c;每次循环都不会走&#xff0c;但是删除的时候&#xff0c;要删除线…

echarts 双堆叠柱状图(数据整理)

1.后台返回的数据格式 {"code": "0000","message": "","messageCode": "操作成功","sign": null,"detail": null,"data": {"pieChart": [{"key": "产品…

C语言--基础面试真题

1、局部变量和静态变量的区别 普通局部变量和静态局部变量区别 存储位置&#xff1a; 普通局部变量存储在栈上 静态局部变量存储在静态存储区 生命周期&#xff1a; 当函数执行完毕时&#xff0c;普通局部变量会被销毁 静态局部变量的生命周期则是整个程序运行期间&#…

基于51单片机的电子秤LCD1602液晶显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机电子秤LCD显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机电子秤LCD显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus8.9及以上 程序编译器&#xf…

深兰科技入选2024全国“人工智能+”行动创新案例TOP100

近日&#xff0c;中科院《互联网周刊》联合eNET研究院、德本咨询、中国社会科学院信息化研究中心共同发布了《2024全国“人工智能”行动创新案例TOP100》榜单。经评委会层层遴选&#xff0c;深兰科技专为洛阳市打造的“工业智能化洛阳中心”项目成功入围该榜单。一同入围的还包…

高通发布电脑CPU,比英特尔Ultra9领先51%

要说2024年最热门的关键词&#xff0c;那肯定非 AI 莫属&#xff0c;当前 AI 已经开始深入各行各业&#xff0c;AI 电视、AI 手机、AI 车机、AI 家电&#xff0c;以及 AI PC ,这些都意味着 AI 将对各个行业带来的新风向和不小的冲击。 2024 年了&#xff0c;PC 处理器还能卷出什…

安居水站:自来水安全性影响因素分析及监测管理对策

摘要&#xff1a;自来水作为人们日常生活的重要组成部分&#xff0c;其安全性直接关系到公众健康。本文深入探讨了可能影响自来水安全性的多种因素&#xff0c;包括水源污染、水处理工艺、供水管网问题、二次供水设施维护不当、工业及农业污染、重金属和微生物污染、季节变化以…

Python使用random模块随机生成ip、端口、字符串

import random import stringdef generate_random_ip():ip ".".join(str(random.randint(0,255)) for _ in range(4))return ipdef generate_random_port():port random.randint(0,65535)return portdef generate_random_data(length):# 从字母&#xff08;大小写&…

SIMRAD AP48 自动舵控制器维修用于 Continuum 自动驾驶仪系统Simrad显示器仪器深圳捷达工控维修

AP48 自动驾驶仪控制器是一款用于 Continuum 自动驾驶仪系统的高级专用控制头&#xff0c;采用现代玻璃舵造型进行了增强。 AP48 专为各种条件下的响应能力和易用性而设计&#xff0c;将大型铝制旋转控制旋钮与专用的“闪避键”配对&#xff0c;以 1 度或 10 度的增量调整左舷…

论文笔记:Large Language Models Are Zero-Shot Time Series Forecasters

2023 neurips 完全是零样本&#xff08;zero-shot&#xff09;的&#xff0c;不需要微调 1 方法 1.1 Tokenization&#xff08;分词和编码&#xff09; 现有的LLM&#xff08;比如GPT3&#xff09;的tokenizer不能直接用来编码时间序列的句子 比如对数字42235630&#xff0…

负载均衡的原理及算法

一、定义 负载均衡&#xff08;Load Balancing&#xff09;是一种计算机网络和服务器管理技术&#xff0c;旨在分配网络流量、请求或工作负载到多个服务器或资源&#xff0c;以确保这些服务器能够高效、均匀地处理负载&#xff0c;并且能够提供更高的性能、可用性和可扩展性。…

鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(二)多线程并发 Taskpool

多线程并发 并发模型是用来实现不同应用场景中并发任务的编程模型&#xff0c;常见的并发模型分为基于内存共享的并发模型和基于消息通信的并发模型。 ArkTS提供了TaskPool和Worker两种并发能力供开发者选择&#xff0c;其具体的实现特点和各自的适用场景存在差异。TaskPool&…