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.mzph.cn/news/613992.shtml

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

相关文章

可狱可囚的爬虫系列课程 11:Requests中的SSL

一、SSL 证书 SSL 证书是数字证书的一种,类似于驾驶证、护照、营业执照等的电子副本。SSL 证书也称为 SSL 服务器证书,因为它是配置在服务器上。 SSL 证书是由受信任的数字证书颁发机构 CA 在验证服务器身份后颁发的,其具有服务器身份验证和…

base64与BytesIO图片进行编码、解码;api调用

base64与BytesIO简单介绍 io.BytesIO 和 Base64 编码都是用于在内存中处理二进制数据的方法,但它们的目的和使用场景有所不同。 1) io.BytesIO io.BytesIO 是 Python io 库中的一个类,它提供了一个在内存中处理二进制数据的接口&#xff0…

Linux最常用的几个时间日期命令

文章目录 Linux最常用的几个时间日期命令一日难再晨及时当勉励 date默认输入显示时区世界协调时格式化日期 时光总是催人老 time语法示例 休息一会 sleep休息5分钟1小时后提醒我时分秒搭配使用倒计时计时器结合脚本 更多信息 Linux最常用的几个时间日期命令 桃花谢了春红&…

如何在Docker本地搭建流程图绘制神器draw.io并实现公网远程访问

推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 前言 提到流程图,大家第一时间可能会想到Visio,不可否认,VIsio确实是功能强大,但是软…

C++里main函数int main(int argc, char **argv)

C里main函数int main(int argc, char **argv), 这两个参数argc和argv分别是什么

Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?

<el-tree-selectv-model"form.topmneu":data"tableData":props"{ label: title, value: id }":render-after-expand"false"style"width: 100%"check-strictly/> 添加 :props "{ lable : 字段名 , value: 字段…

用python写个三子棋游戏

下面是一个简单的三子棋游戏的Python代码示例。在这个游戏中&#xff0c;玩家需要使用鼠标点击来放置棋子&#xff0c;并尽可能地使自己的三个棋子连成一线&#xff08;横、竖或斜&#xff09;。 python 复制代码 import pygame import random # 初始化pygame pygame…

iptables TEE模块测试小记

概述 因为公司项目需求&#xff0c;需要对服务器特定端口进行流量镜像&#xff0c;各种百度之后&#xff0c;发现TEE的模块&#xff0c;后来一番折腾&#xff0c;发现被转发的机器死活收不到数据&#xff0c;最后tcpdump一通了解到根源&#xff0c;博文记录&#xff0c;用以备…

极客时间-读多写少型缓存设计

背景 内容是极客时间-徐长龙老师的高并发系统实战课的个人学习笔记&#xff0c;欢迎大家学习&#xff01;https://time.geekbang.org/column/article/596644 总览内容如下&#xff1a; 缓存性价比 一般来说&#xff0c;只有热点数据放到缓存才更有价值 数据量查询频率命中…

力扣289. 生命游戏

模拟 染色 思路&#xff1a; 可以复制一个表格&#xff0c;然后根据规则两层循环模拟出结果&#xff0c;但是空间复杂度太高&#xff1b;可以复用原有数组&#xff0c;对其进行染色标记&#xff1b; 最终状态是活的标记值 > 1&#xff0c;还原标记值时可以使用规则 val &g…

MongoDB聚合:$bucketAuto

按照指定的表达式对输入文档进行分类后放入指定数字的桶中&#xff0c;跟$bucket不太一样&#xff0c;$bucketAuto可以指定分组的数量&#xff08;颗粒度&#xff09;&#xff0c;$bucketAuto会根据groupBy的值和颗粒度自动生成桶的边界。 语法 {$bucketAuto: {groupBy: <…

java基础之异常练习题

异常 1.Java 中所有的错误/异常都继承自 Throwable类&#xff1b;在该类的子类中&#xff0c; Error 类表示严重的底层错误&#xff0c; 对于这类错误一般处理的方式是 直接报告并终止程序 &#xff1b; Exception 类表示异常。 2.查阅API&#xff0c;完成以下填空&#xff1a;…

leetcode动态规划(零钱兑换II、组合总和 Ⅳ)

518.零钱兑换II 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 1: 输入: amount 5, coins [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 55 5221 52111 511111 示例 2: 输入: amount 3, coi…

【江科大STM32单片机】day1点亮LED灯流水灯蜂鸣器

知识点 推挽模式&#xff1a;高-》低、低-》高电平都能驱动 开漏模式&#xff1a;只能低-》高电平能驱动&#xff0c;高电平相当于高阻态 GPIO_WriteBit 操作单个 GPIO_ResetBits 操作同组 3-2 led闪烁 配置相关驱动 USE_STDPERIPH_DRIVER 配置输出文件格式debug配置slink勾选…

华为认证 | HCIE自学通过率有多高?

01 什么是HCIE认证&#xff1f; HCIE&#xff08;Huawei Certified ICT Expert 华为认证 ICT 专家&#xff09;是华为认证体系中最高级别的 ICT 技术认证&#xff0c;表示通过认证的人具有ICT 领域专业知识和丰富实践经验。 02 HCIE考试可以自学吗&#xff1f; HCIE考试可以自…

Leetcode242.有效的字母异位词

文章目录 原题链接思路1&#xff08;字符串排序后比较&#xff09;代码1思路2&#xff08;哈希表&#xff09;代码2 原题链接 Leetcode242.有效的字母异位词 思路1&#xff08;字符串排序后比较&#xff09; t 是 s 的字母异位词 等价于 将 t 和 s 排序后&#xff0c;两个字符串…

基于Springboot的课程答疑系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的课程答疑系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

Python知识点(史上最全)

Python期末考试知识点&#xff08;史上最全&#xff09; python简介 Python是一种解释型语言 Python使用缩进对齐组织代码执行&#xff0c;所以没有缩进的代码&#xff0c;都会在载入时自动执行 数据类型&#xff1a;整形 int 无限大 浮点型 float…

小程序基础学习(组件化)

&#xff08;一&#xff09;创建 找到components文件夹下面创建新的文件夹 然后再文件夹内创建component格式的文件 创建后这样 我创建的是my-info的文件夹以及my-info的components文件&#xff0c;跟着普通的页面一样 &#xff08;二&#xff09; 注册组件 找到你需要使用组…

Android Debug Bridge(ADB)常用指令记录

ADB简介 Android Debug Bridge&#xff08;ADB&#xff09;是用于在计算机和 Android 设备之间进行通信和调试的命令行工具。它提供了一组命令&#xff0c;可以帮助执行各种与 Android 设备相关的操作&#xff0c;如安装应用程序、调试应用程序、访问设备的文件系统等。 下载…