C/C++复习(三)

一.C++基础复习

命名空间:

        对于命名空间的使用,相信大家都是非常熟悉的了,现在我们就简单回忆下即可!

首先,为什么要有它呢?原因在于如果如何变量、函数名都直接放在全局中,在大型项目中非常容易和其他人冲突,所以引入将命名空间的目的是对标识符的名称进行本地化,,可以防止命名冲突或名字污染。

顺便在复习下命名空间的三种使用方式:

1.加命名空间名称及作用域限定符,例如 std::cout

2.使用using将单个引入,例如:using::cout

3.使用using namespace 命名空间名称 引入
函数重载:

        对于函数重载,我们也是经常使用的,在这里只需要强调下重点内容即可!

        1.函数重载必须在同一作用域

        2.同名函数还需要满足形参要求(参数个数不同/参数类型顺序不同/参数个数相同型不同)

问题:如果两个函数除返回值外都相同,此时返回值不同是否为函数重载?why?

对于该问题大家肯定都知道是不构成的,但是为什么不可以构成,如果你感兴趣,可以向底层看去,这时候我们会想到为什么C语言是不支持函数重载的,原因在于底层不去做函数名修饰规则,而C++通过函数修饰规则,将重载后的同名函数区分,但是由于修饰规则中无返回值部分区分,所以如果两个函数只有返回值不同是无法区分的!

引用/指针对比:

        指针我们之前已经复习过了,现在先对引用复习下,然后进行两者对比分析。

注意点:

1.常引用要const修饰

2.引用做返回值时要特别注意,并且强烈不建议

3.引用必须初始化

面试问题:对于引用与指针请说出两者的区别和相似?

区别:

1.引用必须初始化,指针可以先不初始化(不建议)

2.引用是变量的别名,而指针则是实际上指向一个地址空间

3.引用不能改变对象,而指针可以改变指向

4.无空引用,但存在空指针

5.引用在sizeof下是指对象类型的大小,指针区别于系统,只可能是4/8字节

6.存在多级指针,但是没多级引用

7.引用自加自减是对对象操作,指针则类型偏移量自加自减一个类型单位

8.引用可以直接访问对象,指针需要解引用才能访问到对象

相似点:

在底层上引用实际上是通过指针实现的。

内联与宏:

        我们知道inline可以在编译时将函数展开,但是要注意对于inline只是对编译器的一个建议,实际上可能会不展开,为什么出现内联,此时就要回到宏上了

面试题-宏的优缺点:

优点:

1.代码复用性强

2.性能也较高

缺点:

1.不便于调试

2.代码可读性差,可维护性差,容易误用
3.无法做到类型安全检查

inline:

优点:

1.将函数展开,不影响调试,代码可读性和可维护性都还好

2.代码复用性也高

3.减少函数调用开销,提高效率

缺点:

使目标文件代码量增大,文件更大



二.类与对象

        关于这方面的知识,我之前也是详细讲过的,对于基础部分可以看我之前的博客,现在我们就直接来复习下重点部分内容

C++类的简单学习-CSDN博客

1.类大小的计算

        在(二)中我们复习了结构体的计算,类的计算大体也是如此,需要注意成员函数是不占空间的,放在了公共空间中,空类默认存在一个字节

2.this指针

        C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成,this指针类型是*const,即无法赋值,本质是成员函数的形参

3.八个默认成员函数

构造函数

        特征如下:
        1. 函数名与类名相同。
        2. 无返回值。
        3. 对象实例化时编译器自动调用对应的构造函数。
        4. 构造函数可以重载

        5.如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成

注意点:默认构造函数是指无参的构造函数和全缺省的构造函数

析构函数

        特征如下:
        1. 析构函数名是在类名前加上字符 ~。
        2. 无参数无返回值类型。
        3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载
        4. 对象生命周期结束时,C++编译系统系统自动调用析构函数

析构函数使用的关键点:

        如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类
默认析构函数是指不需要用户定义,由编译器自动生成的析构函数

拷贝构造函数

        特征如下:
        1. 拷贝构造函数是构造函数的一个重载形式。
        2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用

编译器生成的的默认拷贝构造函数是按照字节逐个拷贝,属于浅拷贝(值拷贝),所以如果类涉及到资源申请,需要自己写深拷贝

赋值运算符重载

        特征如下:

        1.参数类型:const T&,传递引用可以提高传参效率
        2.返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值
        3.检测是否自己给自己赋值
        4.返回*this :要复合连续赋值的含义

编译器生成的默认赋值运算符重载也是逐字节的浅拷贝,如果涉及资源申请,要写成深拷贝

重载取址运算符函数/默认重载取址运算符const函数

        特征如下:

        1.参数为空,实际上只有this指针

        2.两者区别是this指针是否被const修饰,一般直接使用默认成员函数即可

移动构造函数:

移动构造函数

        特征如下:

        1.参数为右值引用&&

        2.通常利用C++11中的move进行资源利用

        3.移动构造可以将一个临时对象资源拷贝到一个新对象中,减少不必要的资源消耗,提升效率

移动赋值重载

        特征如下:

        1.参数为右值引用&&

        2.通常利用C++11中move进行资源利用

移动构造函数与移动赋值重载主要就是利用右值引用进行临时资源的再利用,默认的是浅拷贝,如果需要资源申请,需要写成深拷贝。

最后可以参考下之前我写的博客:

C++类的简单学习-CSDN博客

C++类默认成员函数(一)-CSDN博客

C++默认成员函数(二)-CSDN博客

C++默认成员函数(三)_c++ 函数方法默认权限-CSDN博客



最后,感谢大家的支持!!!

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

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

相关文章

数据结构-LRU缓存(C语言实现)

遇到困难,不必慌张,正是成长的时候,耐心一点! 目录 前言一、题目介绍二、实现过程2.1 实现原理2.2 实现思路2.2.1 双向链表2.2.2 散列表 2.3 代码实现2.3.1 结构定义2.3.2 双向链表操作实现2.3.3 实现散列表的操作2.3.4 内存释放代…

Java后端面试----某团一面

美团一面 1.介绍一下你的第一个项目 这个就不多说了,主要是根据自己的简历上面的项目进行一个简短的概括使用的技术栈和什么背景解决了什么问题等等。 2.线程安全的类有哪些,平时有使用过哪些,主要解决什么问题 在Java中线程安全的类比如…

vue使用table实现动态数据报表(行合并)

<template><div class"previewTable"><h2>***项目研发数据报告</h2><table id"previewTable" width"100%"><tr><th>项目名称</th><td colspan"6">{{ resultData.proName }}<…

【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

一键将表格嵌入ppt作为附件!2个做ppt必知的技巧分享!

怎样把表格作为附件放入ppt&#xff1f; 众所周知&#xff0c;微软推出的Office套件包含了Powerpoint和Excel这两款软件&#xff0c;如果想在Powerpoint中插入表格&#xff0c;且表格数据量比较大&#xff0c;此时最好的呈现方式&#xff0c;是在Excel中来展示这些数据&#x…

使用Spring Security+jwt+redis实现登录注册逻辑

Spring Security Spring Security 是一个提供身份验证、授权和防御常见攻击的框架。它为保护命令式和响应式应用程序提供了一流的支持&#xff0c;是保护基于 Spring 的应用程序的事实标准。 这篇博客主要是记录自己第一次使用springSecurity实现登录逻辑的过程。 使用Spring…

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题

【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题 一句话省流&#xff1a; 确保项目地址没有任何中文&#xff0c;重新申请个许可证&#xff0c;然后该咋就咋&#xff0c;完事。 ——————————————————————————————…

滚雪球学Redis[2.2讲]:列表(List)

全文目录&#xff1a; 前言列表类型的使用场景典型使用场景示例 常用命令1. LPUSH&#xff1a;在列表左侧插入元素2. RPUSH&#xff1a;在列表右侧插入元素3. LPOP&#xff1a;从列表左侧弹出元素4. RPOP&#xff1a;从列表右侧弹出元素5. LLEN&#xff1a;获取列表的长度6. LR…

华为云应用侧Android测试APP

05.华为云应用侧Android测试APP 本APP在填写或修改部分参数后能够完成token获取&#xff0c;影子消息读取&#xff0c;命令下发。APP共包含三个界面&#xff1a;主界面获取token、影子消息获取界面、命令下发界面。 实现过程参见&#xff1a;华为云应用侧Android Studio开发-…

SQLITE 构建多表查询

在SQLite中,构建多表查询时,最常用的方式是使用 JOIN 操作符来连接多个表。下面是一些常见的查询方式及其示例: INNER JOIN INNER JOIN 是最常见的联接方式,它返回在两个表中都匹配的记录。```sql sql 复制代码 SELECT 表1.列名, 表2.列名 FROM 表1 INNER JOIN 表2 ON 表1.…

企业如何制定适合自己的专利布局策略

在竞争激烈的市场环境中&#xff0c;专利布局对于企业的发展和竞争优势的建立至关重要。以下将分要点解析企业如何制定适合自己的专利布局策略。 1、明确企业的发展战略和市场定位 企业首先需要深入了解自身的长期发展规划和短期业务目标。明确是要通过技术创新来开拓新市场&am…

微服务之间的相互调用的几种常见实现方式对比

目录 微服务之间的相互调用的几种实现方式 一、HTTP HTTP/RESTful API调用工作原理 二、RPC 设计理念与实现方式 协议与传输层 RPC远程调用工作原理 应用场景与性能考量 特点 三、Feign 设计理念与实现方式 协议与传输层 Feign调用的基本流程 Feign调用的工作原理…

Electron + ts + vue3 + vite

正常搭建脚手架&#xff1a;npm create vitelatest 项目名称 安装electron的相关依赖&#xff1a;注&#xff1a;安装时终端url要项目名那一层 安装npm install electron -D安装打包工具&#xff1a;npm install electron-builder -D开发工具&#xff1a;npm install electron-…

前端_001_html扫盲

文章目录 概念标签及属性常用全局属性head里常用标签body里常用标签表情符号 url编码 概念 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body></bod…

python爬虫 - 深入requests模块

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、下载网络文件 &#xff08;一&#xff09;基本步骤 &#xff08;二&…

高级java每日一道面试题-2024年10月8日-数据库篇[Redis篇]-谈—谈缓存穿透、缓存击穿和缓存雪崩,以及解决办法?

如果有遗漏,评论区告诉我进行补充 面试官: 谈—谈缓存穿透、缓存击穿和缓存雪崩&#xff0c;以及解决办法? 我回答: 在分布式系统和高并发场景中&#xff0c;缓存是提高系统性能和响应速度的重要手段。然而&#xff0c;如果缓存使用不当&#xff0c;可能会遇到一些问题&…

Windows下MYSQL8.0如何恢复root权限

误操作把root权限清掉导致数据库无法登录&#xff08;确实很难受&#xff09;&#xff0c;在网上找了很多方法&#xff0c;发现没有很行之有效的方法&#xff0c;在多方尝试终于找到了适合敏感宝宝体质的方法。 C:\Users\Administrator>mysql -u root -P3307 ERROR 1045 (2…

数据结构——遍历二叉树

目录 什么是遍历二叉树 根据遍历序列确定二叉树 例题&#xff08;根据先序中序以及后序中序求二叉树&#xff09; 遍历的算法实现 先序遍历 中序遍历 后序遍历 遍历算法的分析 二叉树的层次遍历 二叉树遍历算法的应用 二叉树的建立 复制二叉树 计算二叉树深度 计算二…

Redis 高可用方案

Redis 高可用性&#xff08;High Availability&#xff09;是指在 Redis 系统中实现持续的可用性&#xff0c;即使在发生硬件故障或其他意外情况下&#xff0c;系统仍能保持运行。 1 常用方案 为了实现 Redis 的高可用性&#xff0c;以下是几种常用方案&#xff1a; 1.1 使用…

常见校验算法介绍

文章目录 一、奇偶校验二、 校验和三、 BCC&#xff08;Block Check Character&#xff0c;块校验字符&#xff09;校验四、CRC&#xff08;循环冗余校验&#xff09;五、海明码校验六、MD5&#xff08;消息摘要算法第五版&#xff09;和 SHA&#xff08;安全哈希算法&#xff…