【C++初阶】C++简单入门(长期维护)

本篇博客是对C++的一些简单知识分享,有需要借鉴即可。

C++简单入门目录

  • 一、C++前言
    • 1.C++的概念:
    • 2.C++发展历程
    • 3.C++如何学?
  • 二、C++入门
    • 1.C++关键字(C++98标准)
    • 2.命名空间
    • 3.C++输入&输出
      • ①概念说明
      • ②使用说明
      • ③特征说明
      • ④细节拓展
      • ⑤cout与cin的意义
    • 4.缺省参数
      • ①概念说明
      • ②使用规则
      • ③应用举例
      • ④缺省参数的意义
    • 5.函数重载
      • ①概念
    • 6.引用
      • ①概念
      • ②特性
      • 使用场景
        • 1.做参数

一、C++前言

1.C++的概念:

一种高级编程语言,由C发展而来,满足过程化程序设计、基于对象的程序设计、面向对象的程序设计。

2.C++发展历程

在这里插入图片描述
C++最新发展:LINK

3.C++如何学?

  • 写博客总结
  • 定期画思维导图总结
  • 常复习(博客笔记、知乎答案、看书)
  • 刷题

二、C++入门

1.C++关键字(C++98标准)

在这里插入图片描述

2.命名空间

C++命名空间概念:一种命名域、是C++专门用来解决C语言变量命名冲突问题而产生的。
命名空间的意义很大程度上解决C变量命名冲突问题。

知识拓展:C中的命名冲突
命名冲突主要有两大类:

  • 程序员 与 库
    在这里插入图片描述

  • 程序员 与 程序员

知识拓展1:域,C++上指的是作用域LINK
在C++中,大体有四种域:

  • 全局域:生命周期 访问
  • 局部域:生命周期 访问
  • 命名空间域:访问
  • 类域


知识拓展2:编译器对名称的搜索原则:

  • 在不指定域的情况下
  1. 当前域
  2. 全局域
  • 在指定域的情况下
  1. 直接去指定域搜索

命名空间的定义: namespace关键字+命名空间的名字+{…}

  1. 命名空间中可以定义变量/函数/类型
  2. 命名空间可以嵌套
  3. 同一命名空间会被合并
namespace bit
{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

命名空间的使用:

  • 法1:指定访问

需要用到访问操作符 ::

  1. 访问变量/函数 命名空间名称 + :: + 变量名/函数名
  2. 访问结构体 struct + 空间名 + :: + 结构体名
  • 法2:直接访问(展开访问)

需要用到指令:using namespace + 空间名 —>等价于把空间内的命名放到全局变量

  • 法3:展开特定项

eg:using std::cout;

在这里插入图片描述

总结:对比指定访问与展开访问,分析其利弊
答:

  • 指定访问 解决变量冲突问题 麻烦
  • 展开访问 直接把变量放到全局中 方便
  • 部分展开 把常用的变量放到全局中 方便
    其中,做项目一般使用第1与第3方式,第2种方法一般在练习中使用。

头文件展开与命名空间展开的区别:
头文件的展开本质是在预处理阶段拷贝头文件内容。
命名空间的展开本质是影响编译器的搜索规则。

3.C++输入&输出

①概念说明

cpp的输入输出分别是cout与cin,这两个函数均包含在iostream头文件中,在使用时需要展开命名空间进行使用。
在这里插入图片描述

②使用说明

#include<iostream>
using namespace std;int main()
{// <<,1.左移int a = 10;a = a << 1;printf("a<<1:%d\n", a);// <<,2.流插入cout << "hello cpp" << endl;// >>,1.右移a = a >> 1;printf("a>>1:%d\n", a);// >>.2.流提取cin >> a;return 0;
}

③特征说明

下面是cout的特征说明示例:cin也是同理

④细节拓展

在这里插入图片描述

⑤cout与cin的意义

弥补了C语言自定义类型输入输出麻烦的问题

4.缺省参数

①概念说明

缺省参数是c++提供的一种在函数缺少传入值的情况下使用默认值的一种参数。

缺省参数分为两类

  • 全缺省参数
    在这里插入图片描述

  • 半缺省参数
    在这里插入图片描述

②使用规则

  • 有实参优先使用,没有实参使用默认参数
    在这里插入图片描述
  • 缺省参数函数传实参时候从左到右依次给值,缺省参数函数形参从右向左依次给默认值
  • 缺省参数不能在声明与定义中同时出现,要优先给函数声明使用缺省
    在这里插入图片描述
  • 缺省值必须是常量值或者全局变量

思考:为什么缺省参数要优先在函数声明中使用?而不是优先给函数定义使用?
答:
我们首先要明白编译器的编译原理,编译器首先要进行预处理,在这一步中展开头文件,之后编译器要进行编译,在这一步中编译器主要是检查语法,通常情况下,这种时候每个源文件都是独立的,每个调用函数的源文件中也自然大概率没有函数的定义,但是已经有了函数声明(因为经过了预处理),所以为了要让编译器不报错,肯定是先让函数声明有缺省参数。


那为什么不直接函数定义也有缺省参数,函数声明也有缺省参数呢?
因为语法是规定只能有一个的。
在这里插入图片描述

③应用举例

在c语言阶段,我们设计一个栈时候往往初始化不知道要给几个空间,这样我们可以给一个缺省参数来默认给值,然后不够了的话扩容。
在这里插入图片描述

④缺省参数的意义

对函数定义更加灵活化。

5.函数重载

①概念

函数名相同,函数参数不同,称为函数重载

函数参数不同在哪里?

  • 参数的类型不同
    在这里插入图片描述
  • 参数的个数不同
    在这里插入图片描述
  • 参数的顺序不同

思考:编译器是如何支持函数重载的?C语言就不行。
答:名称修饰
在这里插入图片描述

6.引用

①概念

引用:底层汇编层面是用指针实现的,但是在语法层面上是为变量起别名,与指针起到互补作用。
在这里插入图片描述

②特性

  1. 引用在定义时必须初始化
    在这里插入图片描述

  2. 引用不能更改指向
    在这里插入图片描述
    在这里插入图片描述

  3. 一个变量可以有多个引用
    在这里插入图片描述

思考:引用可以完全替代指针吗?
答:不能,引用往往是在用指针比较复杂的地方代替指针。
为什么引用不能完全替代指针?
虽然引用可以在大多数情况下替代指针的使用从而简化指针,但是某些情况下是不能用引用解决的。
比如下面这个例子:
现在有一个单链表,要求删除中间的一个结点。
在这里插入图片描述
这里的关键点就在于引用不能改变指向,现在你把中间结点删除了,但是前面结点的指向怎么办?

//例子,链表
typedef int SLTDataType;
typedef struct SListNode
{SLTDataType val;struct SListNode* next;
}SLNode, * PSLNode;//指针的方法
void SLPush(SLNode** pphead, SLTDataType x)
{assert(pphead);SLNode* newnode = (SLNode*)malloc(sizeof(SLNode));newnode->next = NULL;newnode->val = x;if (*pphead == NULL){*pphead = newnode;return;}else{SLNode* pcur = *pphead;while (pcur->next){pcur = pcur->next;}pcur->next = newnode;}
}//引用的方法
void SLPush(SLNode*& pphead , SLTDataType x)
{assert(pphead);SLNode* newnode = (SLNode*)malloc(sizeof(SLNode));newnode->next = NULL;newnode->val = x;if (pphead == NULL){pphead = newnode;return;}else{SLNode* pcur = pphead;while (pcur->next){pcur = pcur->next;}pcur->next = newnode;}
}void SLPrint(SLNode*& phead)
{while (phead){cout << phead->val << "  ";phead = phead->next;}
}void test_3()
{SLNode* phead = NULL;SLPush(&phead, 1);SLPush(phead, 2);SLPush(&phead, 3);SLPush(phead, 4);SLPrint(phead);
}

使用场景

1.做参数
void C_Swap(int* a,int* b)
{int temp = *a;*a = *b;*b = temp;
}void CPP_Swap(int& a2, int& b2)//在这里可以起与实参一样的名字吗?可以。因为属于不同的域。
{int temp = a;a = b;b = temp;
}void test_1()
{int a1 = 10;int b1 = 20;printf("a1 = %d , b1 = %d\n", a1, b1);C_Swap(&a1,&b1);printf("a1 = %d , b1 = %d\n", a1, b1);int a2 = 10;int b2 = 20;cout << "a2 = " << a2 << " b2 = " << b2 << endl;CPP_Swap(a2, b2);cout << "a2 = " << a2 << " b2 = " << b2 << endl;
}

思考:在这里可以起与实参一样的名字吗?
答:可以,因为属于不同的域。


待续。

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

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

相关文章

JavaScript_注释数据类型

JavaScript_语法_注释&数据类型&#xff1a; 1.2注释&#xff1a; 1.单行注释&#xff1a;//注释内容 2.多行注释&#xff1a;/*注释内容*/ 1.3数据类型&#xff1a; 1.原始数据类型(基本数据类型)&#xff1a;&#xff08;只有这五种&#xff09; 1.number&#xff1a;数字…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准&#xff0c;吉林省文化和旅游厅主管&#xff0c;吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术&#xff0c;是自觉、独立而又面向整个社会的艺术&#xff0c;是文化中极具强烈感染力的重要组成部分&…

经典机器学习模型(八)梯度提升树GBDT详解

经典机器学习模型(八)梯度提升树GBDT详解 Boosting、Bagging和Stacking是集成学习(Ensemble Learning)的三种主要方法。 Boosting是一族可将弱学习器提升为强学习器的算法&#xff0c;不同于Bagging、Stacking方法&#xff0c;Boosting训练过程为串联方式&#xff0c;弱学习器…

如何在 7 天内掌握C++?

大家好&#xff0c;我是小康&#xff0c;今天我们来聊下如何快速学习 C 语言。 本篇文章适合于有 C 语言编程基础的小伙伴们&#xff0c;如果还没有学习过 C&#xff0c;请看这篇文章先入个门&#xff1a;C语言快速入门 引言&#xff1a; C&#xff0c;作为一门集面向过程和…

【Python】科研代码学习:十七 模型参数合并,safetensors / bin

【Python】科研代码学习&#xff1a;十七 模型参数合并&#xff0c;safetensors / bin 前言解决代码知识点&#xff1a;safetensors 和 bin 的区别&#xff1f;知识点&#xff1a;save_pretrained 还会新增的文件知识点&#xff1a;在保存模型参数时&#xff0c;大小发生了成倍…

pytest教程-25-生成覆盖率报告插件-pytest-cov

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest多重断言插件pytest-assume,本小节我们讲解一下pytest生成覆盖率报告插件pytest-cov。 测量代码覆盖率的工具在测试套件运行时观察你的代码&#xff0c;并跟踪哪些行被运行&#xff0c;…

10:00面试,10:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

【我的小工具】生成React页面类

有了数据表的结构信息&#xff0c;就能生成React 的页面类&#xff0c;快捷方便。 生成界面如下&#xff1a; 生成的React FrmUser.js页面如下&#xff1a; 只需再写里面的操作逻辑代码。

Claude使用教程

claude 3 opus面世后&#xff0c;网上盛传吊打了GPT-4。网上这几天也已经有了许多应用&#xff0c;但竟然还有很多小伙伴不知道国内怎么用gpt&#xff0c;也不知道怎么去用这个据说已经吊打了gpt-4的claude3。 今天我们想要进行的一项尝试就是—— 用claude3和gpt4&#xff0c…

C语言操作符详解(三)

一、表达式求值 1.1整型提升 C语言中整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换称为整型提升。 如何进行整型提升呢&#xff1f; 1. 有符号整数提升是按…

不入耳开放式耳机哪个品牌好?2024年热销榜前五名品牌推荐

为何开放式耳机近年来如此火爆&#xff1f;首先&#xff0c;开放式耳机以其开放式的声学设计&#xff0c;打破了传统耳机的局限&#xff0c;为用户带来了更加自然、宽广的音质体验。其次&#xff0c;随着音乐文化的普及和人们对高品质生活的追求&#xff0c;开放式耳机作为高端…

4.9学习总结

一.File类 (一).概述: File 类的对象代表操作系统的文件&#xff08;文件、文件夹&#xff09;,File 类提供了诸如&#xff1a;创建文件对象代表文件&#xff0c;获取文件信息&#xff08;大小、修改时间&#xff09;、删除文件、创建文件&#xff08;文件夹&#xff09;等功…

HarmonyOS开发实例:【数字管家app】

一&#xff0e;概述 本应用是基于RK3399开发板&#xff0c;使用OpenHarmony3.1-Release开发的应用。通过OpenHarmony的分布式技术&#xff0c;使多人能够一起画画。 1.应用运行效果图&#xff1a; 2.分布式画板使用示意图 如上图所示&#xff0c;用户1、用户2在各自本地端进行…

Stack_经典例题_最小栈

题目&#xff1a; 题目分析&#xff1a; 在满足栈的特点的同时&#xff0c;还需要设计一个接口&#xff0c;就是获取栈内的最小元素&#xff01; 解题思路&#xff1a; 因为是栈&#xff0c;所以不好遍历的&#xff01;所以这题的方式不能采用遍历的方式&#xff0c;如果采取…

分布式锁-redission可重入锁原理

5.3 分布式锁-redission可重入锁原理 在Lock锁中&#xff0c;他是借助于底层的一个voaltile的一个state变量来记录重入的状态的&#xff0c;比如当前没有人持有这把锁&#xff0c;那么state0&#xff0c;假如有人持有这把锁&#xff0c;那么state1&#xff0c;如果持有这把锁的…

DELL VMWare R730 R740 R750 iDRAC配置与ESXI安装部署

VMware vCenter Server与ESXI版本兼容对照表 ESXI下载 VMware vcenter7.0许可证 Esxi7.0许可证 VSAN 7.0许可证 DELL VMWare R730 R740 R750 iDRAC配置与ESXI安装部署 vmware vcenter server 7.0 安装教程 1. 进入BIOS界面配置iDRAC网络 开机按F10&#xff0c;开机点击F10选择…

国家统计局行政区划获取及入库ES实践

我们先看下最终效果&#xff1a; 1. ES索引新建 PUT administrative_division {"mappings": {"properties": {"province": {"type": "keyword"},"province_code": {"type": "keyword"},&q…

docker安装oracle

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

C++从入门到精通——类和对象(中篇)

1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中什么都没有吗&#xff1f;并不是的&#xff0c;任何一个类在我们不写的情况下&#xff0c;都会自动生成下面6个默认成员函数。 class Date {}; 2. 构造函数 2.1 概念 对于以下的日期类&am…

Linux下使用C语言实现高并发服务器

高并发服务器 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 使用多进程并发服务器时要考虑以下几点&#xff1a; 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体…