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…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
