【初阶C++篇】~ C++入门

news2024/12/23 17:21:19

C++入门基础

  • 前言
    • 8月语言排行
  • 一· C++书籍推荐
  • 二· C++的第一个程序​
  • 三·命名空间 namespace
    • 命名空间的使用
  • 四·C++输入 输出
  • 五·缺省参数
  • 六·函数重载(就是函数可以同名)
  • 七·引用
    • 引用和指针的关系
  • 八· inline内联

前言

学完数据结构,那么C++也就随之而来,等着我们去挑战!从排行中看到热门语言依旧是:Python, C, C++, JAVA,近几年越来越多的人都去学JAVA,但千万不要以为JAVA就比C++,容易,好学,等学到后期难度都是一样的,甚至比C++更难!无论学的是哪门,只要自身掌握的多那就不怕找不到工作!毕竟有句话叫打铁还需自身硬。
在这里插入图片描述

8月语言排行

在这里插入图片描述

一· C++书籍推荐

在这里插入图片描述
C++ Primer:主要讲解语法,经典的语法书籍,前后中期都可以看,前期如果自学看可能会有点晦涩
难懂,能看懂多少看懂多少,就当预习,学了比特课程后,中后期作为语法字典,非常好用。
STL源码剖析:主要从底层实现的角度结合STL源码,庖丁解牛式剖析STL的实现,是侯捷老师的经典
之作。可以很好的帮助我们学习别人用语法是如何实现出高效简洁的数据结构和算法代码,如何使用
泛型封装等。让我们不再坐井观天,闭门造车,本书课程上一半以后,中后期可以看。
Effctive C++:本书也是侯捷老师翻译的,本书有的一句评价,把C++程序员分为看过此书的和没看过
此书的。本书主要讲了55个如何正确高效使用C++的条款,建议中后期可以看一遍,工作1-2年后再看
一遍,相信会有不一样的收获。

二· C++的第一个程序​

C++兼容C语言绝大多数的语法,所以C语言实现的在C++下依旧可以运行

在这里插入图片描述

三·命名空间 namespace

在这里插入图片描述
这里出现报错的原因是什么呢?其实是在头文件下包含rand这个全局的变量,而现在又定义了一个rand,那么在c语言阶段下,咱们肯定没学过一个变量可以有两个变量名的不能重复定义。
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全
局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名
冲突或名字污染,namespace关键字的出现就是针对这种问题的。

如图:
在这里插入图片描述
如图,我现在将rand定义在了在 zai 这个作用域下,这样就与全局域分开了,举个简单例子:在这里插入图片描述
那么这时候给张若男戴上耳机,你再打电话叫,回答你的肯定是你真正的女朋友
在这里插入图片描述
我想说的是命名空间有种关起门来自己做自己的事,不受他人(全局域)干扰
• namespace只能定义在全局,当然他还可以嵌套定义。​
• 项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突。​
• C++标准库都放在一个叫std(standard)的命名空间中。

命名空间的使用

编译查找一个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间里面去查找。所以下面程序会编译报错。所以我们要使用命名空间中定义的变量/函数,有种方式:​
• 指定命名空间访问,项目中推荐这种方式。
• using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。​
• 展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四·C++输入 输出

• 是 Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输
出对象。
• std::cin 是 istream 类的对象,它主要面向窄字符(narrow characters (of type char))的标准输
入流。
• std::cout 是 ostream 类的对象,它主要面向窄字符的标准输出流。​
• std::endl 是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区。​
• <<是流插入运算符,>>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
• 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入
输出可以自动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是
C++的流能更好的支持自定义类型对象的输入输出。​
• IO流涉及类和对象,运算符重载、继承等很多面向对象的知识,这些知识我们还没有讲解,所以这
里我们只能简单认识一下C++ IO流的用法,后面我们会有专门的一个章节来细节IO流库。​
• cout/cin/endl等都属于C++标准库,C++标准库都放在一个叫std(standard)的命名空间中,所以要
通过命名空间的使用方式去用他们。
• 一般日常练习中我们可以using namespace std,实际项目开发中不建议using namespace std。​
• 这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含间接包含了。vs系列
编译器是这样的,其他编译器可能会报错。

在这里插入图片描述

五·缺省参数

• 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)
• 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
• 带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。​
• 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

在这里插入图片描述
说的明白一点就是给形参一个默认值,如果传参的时候什么都没传那函数就调用的是那个默认值,如果传的是实参,那就使用这个实参

六·函数重载(就是函数可以同名)

C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。

在这里插入图片描述
构成函数重载条件:
1、参数类型不同​
2、参数个数不同​
3、参数类型顺序不同​
4.返回值不同不能作为重载条件,因为调用时也无法区分​

七·引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间
类型& 引用别名 = 引用对象;
C++中为了避免引入太多的运算符,会复用C语言的一些符号,比如前面的<< 和 >>,这里引用也和取地址使用了同一个符号&,大家注意使用方法角度区分就可以。(吐槽一下,这个问题其实挺坑的,个人觉得用更多符号反而更好,不容易混淆)

在这里插入图片描述
就和起外号一样,那么变量也有外号
在这里插入图片描述

引用和指针的关系

C++中指针和引用就像两个性格迥异的亲兄弟,指针是哥哥,引用是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有自己的特点,互相不可替代。
• 语法概念上引用是一个变量的取别名不开空间,指针是存储一个变量地址,要开空间。
• 引用在定义时必须初始化,指针建议初始化,但是语法上不是必须的。
• 引用在初始化时引用一个对象后,就不能再引用其他对象;而指针可以在不断地改变指向对象。
• 引用可以直接访问指向对象,指针需要解引用才是访问指向对象。
• sizeof中含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下
占4个字节,64位下是8byte)​
• 指针很容易出现空指针和野指针的问题,引用很少出现,引用使用起来相对更安全一些。

八· inline内联

• 用inline修饰的函数叫做内联函数,编译时C++编译器会在调用的地方展开内联函数,这样调用内联函数就需要建立栈帧了,就可以提高效率。
• inline对于编译器而言只是一个建议,也就是说,你加了inline编译器也可以选择在调用的地方不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。inline适用于频繁
调用的短小函数,对于递归函数,代码相对多一些的函数,加上inline也会被编译器忽略。​
• C语言实现宏函数也会在预处理时替换展开,但是宏函数实现很复杂很容易出错的,且不方便调试,C++设计了inline目的就是替代C的宏函数。​
• vs编译器 debug版本下面默认是不展开inline的,这样方便调试,debug版本想展开需要设置一下以下两个地方。
• inline不建议声明和定义分离到两个文件,分离会导致链接错误。因为inline被展开,就没有函数地址,链接时会出现报错。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

数据分析处理库(pandas)

目录 数据预处理 数据读取 DataFrame结构 数据索引 创建DataFrame Series操作 数据分析 统计分析 pivot数据透视表 groupby操作 常用函数操作 Merge操作 排序操作 缺失值处理 apply自定义函数 时间操作 绘图操作 大数据处理技巧 数值类型转换 属性类型转换…

FPGA学习笔记

FLASH: 掉电程序不丢失&#xff0c;属于ROM. 是的&#xff0c;Flash 存储器属于 ROM&#xff08;只读存储器&#xff09;的范畴&#xff0c;但它与传统的 ROM&#xff08;如 PROM、EPROM&#xff09;有一些区别。 Flash 与 ROM 的关系 ROM&#xff08;Read-Only Memory&#…

企业级Mysql 集群技术部署

目录 1.1部署mysql 1.1.1 安装依赖性&#xff1a; 1.1.2 下载并解压源码包 1.1.3 源码编译安装mysql 1.1.4 部署mysql 2.mysql的主从复制 2.1 配置masters 2.2配置slave 2.3 延迟复制 2.4 慢查询日志 2.5并行复制 2.6 原理刨析 2. 7架构缺陷 3.半同步模式 3.1半同…

智能导诊系统:帮助患者找医院、找科室、找医生,解决“知症不知病”“知病不知科”“挂错号”问题

方案概述 智能导诊是基于医疗大模型、知识图谱、人机交互&#xff0c;帮助患者找医院、找科室、找医生&#xff0c;解决“知症不知病”“知病不知科”“挂错号”问题&#xff0c;根据病情分级导流&#xff0c;助力分级诊疗。支持通过语音、文字、点选、图片等多种方式与患者沟…

macbook怎么换自定义壁纸?Mac怎么设置壁纸 macOS中如何轻松删除不需要的壁纸?

自定义壁纸&#xff0c;不仅是为了优化桌面外观&#xff0c;还能在很大程度上影响用户情绪。一张好看的壁纸&#xff0c;可以显著提升用户的使用体验。因此&#xff0c;掌握更换和删除壁纸的操作技巧&#xff0c;就显得十分重要。下面详细解读如何在Mac上设置壁纸&#xff0c;以…

利用Leaflet.js创建交互式地图:绘制多个多边形和点位

引言 在地理信息系统&#xff08;GIS&#xff09;和地图可视化领域&#xff0c;Leaflet.js是一个轻量级但功能强大的JavaScript库&#xff0c;它提供了丰富的API来创建交互式地图。本文将通过一个实际的Vue组件示例&#xff0c;展示如何使用Leaflet.js在地图上绘制多边形和点位…

用「图灵测试」检验AI尤其是大语言模型,真的科学吗?

当前的大型语言模型似乎能够通过一些公开的图灵测试。我们该如何衡量它们是否像人一样聪明呢&#xff1f; 在发布后的近两年时间里&#xff0c;ChatGPT 表现出了一些非常类似人类的行为&#xff0c;比如通过律师资格考试。这让一些人怀疑&#xff0c;计算机的智力水平是否正在接…

c++习题28-计算2的N次方

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 描述 任意给定一个正整数N(N<100)&#xff0c;计算2的n次方的值。 输入描述 输入一个正整数N。 输出描述 输出2的N次方的值。 用例输入 1 5 用例输出 1 32 二&#xff0…

【python入门到精通专题】1.知识与环境准备

小节目标: 计算机基础知识了解编程语言python安装与卸载pycharm安装与卸载终端的使用 一.计算机基础 程序员要想让计算机工作&#xff0c;必须知道计算机能干什么&#xff0c;怎么干的&#xff0c;这也就是我们必须学习计算机基础的原因 1.硬件系统 理解方式: 你通过耳朵和…

英文文献翻译工具推荐哪个?高效学习新选择

在学习英语的旅途中&#xff0c;我们难免会遇到难以理解的词汇、句子或整篇文章。 这时&#xff0c;一款优秀的英文文献翻译软件就显得尤为重要。它不仅能助你一臂之力&#xff0c;还能让你的学习过程更加高效。 本文将为你推荐五款英文文献翻译软件免费版&#xff0c;它们将…

【十滴水 / 4】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 3e510; unordered_map<int, int> mp; int c, m, n; int res; struct grid{int l;int r;int pos;int val;bool explode;bool const operator < (const grid& a){return pos < a.pos…

【JDBC】DAO和增删改查通用方法 | 案例

九、DAO和增删改查通用方法 DAO&#xff1a;Data Access Object访问数据信息的类和接口&#xff0c;包括了对数据的CRUD&#xff08;Create、Retrival、Update、Delete&#xff09;&#xff0c;而不包含任何业务相关的信息 作用&#xff1a;为了实现功能的模块化&#xff0c;…

【推荐100个unity插件之30】只需拖放即可实现Unity UI动画——AnimationUI插件的视野

地址 github&#xff1a;https://github.com/DhafinFawwaz/Unity-AnimationUI gitee&#xff1a;https://gitee.com/xiangyuphp/Unity-AnimationUI 介绍 AnimationUI是一个统一的工具&#xff0c;可以轻松创建UI动画&#xff0c;无需代码。您可以简单地拖放来创建一些平滑的…

鸿蒙开发5.0【基于Swiper的页面布局】

场景一&#xff1a;Swiper页面支持自定义动画 方案&#xff1a; 给Swiper组件设置.nextMargin(50).prevMargin(50)属性。 给Swiper组件添加onChange事件&#xff0c;设置当前this.currentIndexindex&#xff0c;当currentIndex为首页或者尾页时&#xff0c;设置上一张以及下一…

“喂饭级”教程!建筑AI生成设计Stable Diffusion看这篇就够了!

前言 你最近是否看过这样的“魔法案例”&#xff0c;由一张简单的SU体块图片&#xff0c;快速生成多个设计方案&#xff0c;就像这样&#xff1a; ©绘图空间 而看过之后&#xff0c;你是否也在心里想着——“教练&#xff01;我要学这个&#xff01;” 今天我们就将带你…

YOLOv7输出层之间的热力图

我们经常看到一些论文里绘制了不同的热力图&#xff0c;来直观的感受其模型的有效性。特别是使用了注意力模块的网络&#xff0c;热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上&#xff0c;以便对模型的有效性和合理性进行评估。 例如Centralized Feature Pyra…

青蛙跳台阶与汉诺塔问题

hello&#xff0c;各位小伙伴们上次我们复习了C语言小tip之函数递归&#xff0c;这次我们来使用函数递归来完成青蛙跳台阶和汉诺塔问题&#xff01; 青蛙跳台阶问题 青蛙跳台阶问题&#xff1a;一只青蛙跳n阶台阶&#xff0c;一次可以跳1阶或者两阶&#xff0c;问有多少种情况…

【精选】基于Hadoop的热点事件分析的设计与实现(全网最新定制,独一无二)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Ubuntu 24.04 LTS源码安装doccano

引言 doccano是一款面向机器学习从业者的开源数据标记工具。您可以使用 doccano 执行不同类型的标记任务&#xff0c;支持多种数据格式。要了解 doccano 的功能&#xff0c;请试用doccano 演示版。 1.软件下载 git clone https://github.com/doccano/doccano.git cd doccano …

python学习——爬虫之session请求处理cookie

import requestssessionrequests.session() url"https://passport.17k.com/ck/user/login" data{"loginName": "19139186287","password":"2001022600hzk"} ressession.post(url,datadata) print(res.text)# session通过会话…