c++构造函数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、构造函数
- 1.构造函数的形式
- 2.构造函数的调用时机
- 3.委托构造函数
- 4.复制构造函数
- 二、析构函数
本文仅为个人笔记
视频链接:https://www.bilibili.com/video/BV1th41187DP/?spm_id_from=pageDriver&vd_source=1036f2f56be734d1fd42a8e7e38bee4c
一、构造函数
构造函数:在对象被创建时使用特定的值构造对象,将对象初始化为一个特定的初始状态。
1.构造函数的形式
- 函数名与类名相同
- 不能定义返回值类型,也不能有return语句
- 可以有形式参数,也可以没有
- 可以是内联函数
- 可以重载
- 可以带默认参数值
2.构造函数的调用时机
在对象创建时被自动调用,并且只要定义一个对象就一定会调用构造函数。
如果程序中没有定义构造函数,则编译器会在需要的时候自动生成默认构造函数。
注意:一旦自己实现构造函数,则默认构造函数不会隐含生成,此时如果依然希望编译器隐含生成默认构造函数可以使用“=default”。
如下:
//类定义
class Clock{
public:Clock(int newH, int newM, int newS); //构造函数Clock()=default;//指示编译器提供默认构造函数void setTime(int newH, int newM, int newS);void showTime();
private:int hour,minute,second;
};
默认构造函数也即调用时可以不需要实参的构造函数,其有两种
- 参数表为空的构造函数
- 全部参数都有默认值的构造函数
但在一个类中,两者不能同时出现,肉则编译错误。
例子如下:
可尝试单步执行跟踪
//类定义
class Clock{
public:Clock(int newH, int newM, int newS); //构造函数Clock();//默认构造函数void setTime(int newH, int newM, int newS);void showTime();
private:int hour,minute,second;
};
//默认构造函数
Clock::Clock():hour(0),minute(0),second(0){}
//构造函数的实现
Clock::Clock(int newH, int newM, int newS){hour = newH;minute = newM;second = newS;
}
void Clock::setTime(int newH, int newM, int newS){hour = newH;minute = newM;second = newS;
}
inline void Clock::showTime(){cout<<hour<<":"<<minute<<":"<<second<<endl;
}int main(){Clock c(6,40,0);Clock c2;c.showTime();c2.showTime();return 0;
}
3.委托构造函数
类中往往有多个构造函数,只是参数表和初始化列表不同,其初始化算法都是相同的,这时,为了避免代码重复,可以使用委托构造丞数。
如下形式:
Clock::Clock(int newH, int newM, int newS){hour = newH;minute = newM;second = newS;
}
Clock::Clock():Clock(0,0,0){}//委托构造函数
4.复制构造函数
复制构造函数是一种特殊的构造函数,其形参为本类对象的引用。作用是用一个已存在的对象去初始化同类型的新对象。
- 我们经常会需要用一个已经存在的对象,去初始化新的对象,这时就需要一种特殊的构造函数——复制构造函数
- 隐含生成的复制构造函数可以实现对应数据成员的一一复制
- 自定应的复制构造函数可以实现特殊的复制功能
其形式如下:
class 类名{
public:类名(形参); //构造函数类名(const 类名 &对象名); //复制构造函数// ...
};
类名::类(const 类名&对象名) //复制构造函数的实现
{函数体
}
复制构造函数被引用的三种情况:
- 定义一个对象时,以本类另一个对象作为初始值,发生复制构造;
- 如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造
- 如果函数的返回值是类的对象,函数执行完返回主调函数时,将使用return语句中的对象初始化成一个临时无名对象,传递给主调函数,此时发生复制构造
class Point{
public:Point(int xx=0,int yy=0){x==xx;y==yy;}//构造函数、内联Point(const Point&p);//复制构造函数void setX(int xx){x==xx;}void setY(int yy){y==yy;}int getX() const {return x;}int getY() const {return y;}
private:int x,y;
};
//复制构造函数的实现
Point::Point(const Point&p){x = p.x;y = p.y;cout<<"Calling the copy constructor"<<endl;
}//形参为Point类对象
void fun1(Point p){cout<<p.getX()<<endl;
}
//返回值为Point类对象
Point fun2(){Point a(1,2);return a;
}int main(){Point a(4,5);Point b(a); //用a初始化bcout<<b.getX()<<endl;fun1(b); //对象b作为fun1的形参b = fun2();//函数的返回值为类对象(由于编译器的优化功能,此处可能不会调用复制构造函数)cout<<b.getX()<<endl;return 0;
}
二、析构函数
- 完成对象被删除前的一些清理工作
- 在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间
- 如果程序未声明析构函数,编译器会将自动生成一个默认的析构函数,函数体为空
注:析构函数不能有参数
class Point{
public:Point(int xx,int yy);~Point();//析构函数//其他函数原型
private:int x,y;
};
Point::Point(int xx,int yy){x = xx;y = yy;
}
Point::~Point(){}
相关文章:
c++构造函数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、构造函数1.构造函数的形式2.构造函数的调用时机3.委托构造函数4.复制构造函数二、析构函数本文仅为个人笔记 视频链接:https://www.bilibili.com/vid…...
redis 未授权访问漏洞
redis 未授权访问漏洞 目录 redis 未授权访问漏洞 漏洞描述 漏洞原因: 漏洞危害 漏洞复现: 漏洞复现 写webshell: 写计划任务:centos默认在/var/spool/cron 写ssh公钥实现ssh登录: 漏洞描述: Redis默认情况下…...
如何制作一个自定义的winpe?
winpe制作过程 获取相关资源 https://www.aliyundrive.com/s/MP58JbRsm76 文件存放位置 将压缩包存放在一个全英文目录下了,我这里选择了D:/winpe目录 解压文件 将三个压缩包进行解压到当前目录,如下图所示 创建一个mount目录,并在mount目录下分别创建boot和install目…...
QString转为2进制,8进制,10进制,16进制介绍
首先看段代码: bool ok false;QString ss "11";qDebug()<<"-----"<<ss.toInt(&ok,2)<<ss.toInt(&ok,10)<<ss.toInt(&ok,16)<<ss.toInt(&ok,8);结果: ----- 3 11 17 9 bool ok fal…...
2023-3-2-22:01随笔
好久没怎么更新技术分享博客了。去年从2022年1月3日到2023年1月份一直专注于ADAS的行车横向功能的研发与实车调试,2022年写了几篇项目经验的文章,像LQR算法(虽然和同事(志同道合,技术追求的民哥)写出的工程…...
学习红客技术必备,手把手教你成为“安防第一人”
互联网时代已悄悄来临,作为新时代的人们,我们日常生活、工作、学习方面都需要借助互联网来完成,这样,又产生一种新的问题,那就是网络安全的问题,有时我们拼命加班好不容易完成的东西,在一夜之间…...
Git系列:常见指令辨析
Git系列:常见指令辨析指令辨析工作区、暂存区、版本库傻傻分不清楚?主干和分支的关系是什么?git fetch/merge/pull辨析日志查看时,git log与git reflog的区别是?git diff和status的区别是?相关资料本文小结…...
并发编程实战-构建自定义的同步工具
文章目录1.状态依赖性的管理1.1 示例:将前提条件的失败传递给调用者1.2 示例:通过轮询与休眠来实现简单的阻塞1.3 条件队列2.使用条件队列2.1 条件谓词2.2 过早唤醒2.3 丢失的信号2.4 通知2.5 示例:阀门类2.6 子类的安全问题2.7 入口协议与出…...
HBase集群部署
目录 一、前期准备 二、HBase下载 1. 查看HBase与hadoop版本对应关系 2. hbase的下载 3. 将hbase的tar包上传到linux 下 二、安装hbase 1. 解压 2. HBase的文件配置 主机名hadoop版本HBase版本hadoop安装路径Hbase安装路径HadoopMaster3.3.02.4.3/home/hadoop/softwareh…...
网络传输:linux下的网络请求和下载(ping wget curl)、端口
一、下载和网络请求 1.ping命令 可以通过ping命令,检查指定的网络服务器是否可连通状态 语法:ping [-c num] ip或主机名 选项: -c 检查的次数,若不使用-c,将无限次数持续检查参数:ip或主机名,…...
阅读(1)-----六级
目录 1.单词不懂怎么办? 1.1构词法 1.2上下文 2.句子不通怎么办? 3.时间不够怎么办 ? 4.题型 4.1细节题 问文章的细节 4.2主旨题(文章主旨和段落主旨) 4.3语义题 4.4观点题 (一共三种,支持、反对和中立 &…...
【Python实战】快看:”又中奖了,中大奖了“周围的小伙伴都惊呆了~你还不麻溜滴~(代码版彩票小游戏上线啦)
导语 哈喽!北鼻们,晚上好。 夕阳🌇的第一缕阳光送给小可爱们~每天都要加油鸭! 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 彩票是一个恒古不…...
【python】控制台中文输出乱码解决方案
注:最后有面试挑战,看看自己掌握了吗 文章目录控制台原因解决方法方法一方法二方法三如果是os.system函数乱码控制台原因 一般的情况下,还是我们的源码文件的编码格式问题。我们一般是要把源码文件的编码格式改成utf-8就好了,但是…...
一名IC验证工程师的成长路径是怎么样的?来听听工程师的见解
IC验证这个岗位对于非科班的学生是比较友好的,因为验证需要具备的技能UVM,SV,C等,非科班和科班的差距不会拉开太大。因其岗位需求量巨大而格外受到了大家的青睐,甚至成为不少学生的转行首选。 验证对于IC的重要性 IC…...
java工具jconsole/jstat学习
参考视频【java】jvm指令与工具jstat/jstack/jmap/jconsole/jps/visualVM_哔哩哔哩_bilibili 一、jps 我们再windows和linux都可以看到哪些java进程。 有小伙伴又会问了 这个类是java的 那其他的这么多进程18096 /8685 这些是啥啊 其实也是java进程,只不过是其他程…...
WSN_1 介绍;部分应用介绍
学习自书籍:Fundamentals of Wireless Sensor Networks. WSN 介绍 传感器 从基础角度说,传感器观测采集现实世界的一些数据。 另一个名称是 transducer 换能器,指传感器将一些形式的信号转换为其他形式的信号,如光敏传感器 光…...
linux常用命令介绍 05 篇——实际应用篇(用 cut、uniq等统计文档里每个关键词出现的次数)
linux常用命令介绍 05 篇——实际应用篇(用 cut、uniq等统计文档里每个关键词出现的次数)1. 先导文章——关于行过滤 和 列截取2. 关于单个统计单词个数2.1 grep2.2 wc3. 统计文档中每个关键词出现的次数3.1 先看文档内容 需求3.1.1 文档内容3.1.2 需求…...
大数据处理学习笔记1.7 Scala类与对象
文章目录零、本节学习目标一、类(一)类的定义(二)类的实例化二、单例对象(一)单例对象概念(二)案例演示三、伴生对象(一)伴生对象概念(二…...
Feign踩坑源码分析 -- 请求参数分号变逗号
一.案例 1.1.Post请求: http://localhost:8250/xx/task/test json格式参数: {"string": "a;b;c;d" } 1.2.controller代码: AutowiredDataSourceClientService dataSourceClientService;RequestMapping("/test"…...
nginx通用history模式刷新
注:1.通用配置只支持二段路由,二段及以上依然需要单独进行配置 2.所有location后面的路径,都需要使用通配符进行配置 location ^~ /phdp/ {try_files $uri $uri/ /phdp/index.html;index ruoyi.html index.html index.htm;}location ^~ /phdp-api/ {client_max_body_size 20m;p…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
