2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言

1.实现一个宏函数ADD

#define ADD(x,y) ((x)+(y))//宏是预编译阶段完成替换,注意括号

2.宏的优缺点

优点:
1.增强代码的复用性
2.宏函数不用建立栈帧,提高性能
缺点:
1.不方便调试
2.没有安全检查

0x02.内联函数

1.以空间换时间,减少了函数调用栈帧的开销
2.内联函数只是对编译器的建议
3.短小的函数建议定义为内联,而递归循环不建议
4.inline不建议声明和定义分离,inline是一种“用于实现的关键字”,而不是“用于声明的关键字”。(直接在.h文件中定义)
5.inline函数是不进符号表的

上链接知乎大佬

0x03.类和对象

1.this指针

1.1C++给每个非静态成员函数增加了一个隐式的指针参数,即this指针,让该指针指向当前对象,在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要传递,编译器自动完成.
1.2.this指针的特性

2.默认成员函数

2.1构造函数

class Date
{public:// 1.无参构造函数Date(){}// 2.带参构造函数Date(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;
};

1.函数名与类名相同,无返回值,对象实例化时编译器自动调用构造函数,可以重载。
2.如果类中没有显示定义构造函数,则c++编译器会自动生成一个无参的默认构造函数,一旦用户显示定义编译器将不再生成。对于自定义类型会调用其的默认成员函数。(C++11允许内置类型成员变量在声明时给默认值)
3.无参的构造函数和全缺省的构造函数和编译器自己生成的都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。

Date()
{
_year = 1900;
_month = 1;
_day = 1;
}
Date(int year = 1900, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}

2.2析构函数

对象销毁时会自动调用析构函数,完成对象中资源的清理工作
和构造函数差不多,如果未显示定义,会自动生成默认的析构函数。对内置类型不做处理,如果有自定义类型,则会调用对应的析构函数。

2.3拷贝构造

1.拷贝构造实际上是构造函数的重载形式
2.拷贝构造的参数只有一个且必须使用传引用传参,使用传值方式会引发无穷递归

class Date
{
public:Date(int year = 1900, int month = 1, int day = 1)//构造函数{_year = year;_month = month;_day = day;}Date(Date d){_year = d._year;_month = d._month;_day = d._day;}
private:int _year;int _month;int _day;
};
int main()
{Date d1;Date d2(d1);return 0;
}

如上面的传值拷贝就会报错
在这里插入图片描述
原因:用d1对象构造d2,要去调用拷贝构造函数,因为是传值调用,我们要把d1赋值给形参d,再次调用拷贝构造函数,因为参数会拷贝一份实参,调用了d的拷贝构造函数,需要把参数传给d,而此时传给d又要调用拷贝构造函数,如此反复,从而发生无限递归。
在这里插入图片描述

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

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

相关文章

什么是冒泡排序?如何实现?

一、是什么 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法 冒泡排序的思想就是在每次遍历一遍未排序的数列之后,将一个数据元素浮上去(也就是排好了一个数据) 如同碳酸饮料中二氧化碳的…

摄像头视频录制程序使用教程(Win10)

摄像头视频录制程序-Win10 🥗介绍🍛使用说明🚩config.json 说明🚩启动🚩关闭🚩什么时候开始录制?🚩什么时候触发录制?🚩调参 🥗介绍 检测画面变化…

“数据要素×”行动计划发布,粮食安全监管如何应变?

近日,国家数据局发布“数据要素”三年行动计划(2024-2026年),在“数据要素现代农业“部分提到:提升农业综合生产能力,支持农业生产经营主体和相关服务企业融合利用气象、土壤、农事作业、病虫害、市场等数据…

FineBI实战项目一(17):热门商品Top10分析开发

点击新建组件,创建热门商品Top10组件。 选择柱状图,拖拽cnt(总数)到横轴,拖拽goodName到纵轴。 选择排序规则。 修改横轴和纵轴的标签名称 切换到仪表板,拖拽组件到仪表板 效果如下:

别再纠结,这8款设计工具助你轻松绘制原型图!

原型图设计工具有很多优点。除了帮助设计师快速与客户达成协议,避免项目前景的冲突外,原型图设计工具还可以让客户看到正在创建的内容。如果需要更改,原型图设计工具也可以轻松完成。本文快速总结了8种原型图设计工具。无论你是专业设计师还是…

使用AUTOSAR来开发汽车基础软件的优点

1、高质量。以前我们采用手写代码的方式,是几个工程师在战斗。现在我们采用平台,BSW代码都是供应商提供的,我们相当于后面还有一个团队陪着我们在战斗。 2、低成本。大家都说采用AUTOSAR平台好贵,但是从长远来看是值得的&#xff…

Windows安全基础:认证基础知识

目录 Windows凭据 Windows访问控制模型 访问令牌: 安全标识符(SID): 安全描述符: 令牌安全防御 1、禁止域管理员异机登录 2、开启“审核进程创建”策略 Windows凭据 SSPI(Security Support Provide…

华为ipv4+ipv6双栈加isis多拓扑配置案例

实现效果:sw1中的ipv4和ipv6地址能ping通sw2中的ipv4和ipv6地址 R2-R4为存IPV4连接,其它为ipv6和ipv4双连接 sw1 ipv6 interface Vlanif1 ipv6 enable ip address 10.0.11.1 255.255.255.0 ipv6 address 2001:DB8:11::1/64 interface MEth0/0/1 inter…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 : 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

二刷Laravel 教程(用户注册)总结Ⅳ

一、显示用户信息 1)resource Route::resource(users, UsersController); 相当于下面这7个路由 我们先用 Artisan 命令查看目前应用的路由: php artisan route:list 2) compact 方法 //我们将用户对象 $user 通过 compact 方法转化为一个关联…

数据聚合、自动补全、数据同步、es集群

目录 数据聚合 聚合的分类 DSL实现bucket聚合 DSL实现Metrics聚合 RestAPI实现聚合 多条件聚合 带过滤条件的聚合 自动补全 安装拼音分词器 自定义分词器 completion suggester查询 修改索引库数据结构 RestAPI实现自动补全查询 实现搜索框自动补全 数据同步 数…

华为HarmonyOS 创建第一个鸿蒙应用 运行Hello World

使用DevEco Studio创建第一个项目 Hello World 1.创建项目2.预览 Hello World3.安装模拟器4.运行 Hello World 1.创建项目 创建第一个项目,命名为HelloWorld,点击Finish 选择Empty Ability模板,点击Next Hello World 项目已经成功创建…

【VRTK】【VR开发】【Unity】19-VRTK实现旋转运动

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【背景】 在实际开发中,旋转运动也是时常需要模拟的重要运动类型。常见的场景有开关门,方向盘轮胎以及拉动拉杆等等。 旋转运动的实现可以基于物理系…

使用 matlab 求解最小二乘问题

有约束线性最小二乘 其标准形式为: min ⁡ x 1 2 ∥ C x − d ∥ 2 2 \mathop {\min }\limits_x \quad \frac{1}{2}\left\| Cx-d \right\|_2^2 xmin​21​∥Cx−d∥22​ 约束条件为: A ⋅ x ≤ b A e q ⋅ x b e q l b ≤ x ≤ u b \begin{aligned} …

基于多反应堆的高并发服务器【C/C++/Reactor】(中)HttpResponse的定义和初始化 以及组织 HttpResponse 响应消息

一、HttpResponse的定义 1.定义状态码枚举 // 定义状态码枚举 enum HttpStatusCode {Unknown 0,OK 200,MovedPermanently 301,MovedTemporarily 302,BadRequest 400,NotFound 404 }; 2.HTTP 响应报文格式 这个数据块主要是分为四部分 第一部分是状态行第二部分是响应…

游戏、设计选什么内存条?光威龙武系列DDR5量大管饱

如果你是一位PC玩家或者创作者,日常工作娱乐中,确实少不了大容量高频内存的支持,这样可以获得更高的工作效率,光威龙武系列DDR5内存条无疑是理想之选。它可以为计算机提供强劲的性能表现和稳定的运行体验,让我们畅玩游…

无监督学习Principal Component Analysis(PCA)精简高维数据

目录 介绍 一、PCA之前 二、PCA之后 介绍 Principal Component Analysis (PCA) 是一种常用的数据降维和特征提取技术。PCA通过线性变换将高维数据映射到低维空间,从而得到数据的主要特征。PCA的目标是找到一个正交基的集合,使得将数据投影到这些基…

【C语言小游戏】贪吃蛇

文章目录 1.引言2.运行图2.涉及知识3 Windows API3.1 控制台3.2 控制台屏幕坐标3.3 操作句柄3.4 控制台屏幕光标3.5 监视按键 4. 设计说明5. 完整代码 1.引言 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇 实现基本的功能: 贪吃蛇地图绘制蛇吃⻝物的…

vue简体繁体互转无需做字库

第一种方法 vue-i18n 需要自己写字库库很麻烦,而且不支持后端传值 第二种 opencc 这个库前端去使用的时候 数据较多的情况非常慢.影响使用 第三种 language-hk-loader npm i language-hk-loader 从其他博客中看到的一种,很方便不需要写字库,但是在打包的时候去整体的去翻译…

网络层详解

目录 前言 一、IP协议 1、IP协议报头 2、协议字段理解 (1)4位版本 (2)4位首部长度 (3)8位服务类型 (4)16位总长度 (5)标识、标志与片偏移 &#xf…