【C++】C++入门知识(一)

news2025/1/12 12:27:37

作者:一个喜欢猫咪的的程序员  

专栏:《C++》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》

目录

1.C++关键字 

 2.命名空间

2.1局部变量和全局变量

2.2命名空间的概念及使用

2.3std命名空间

3.C++输入&输出

 4.缺省参数

4.1缺省参数的概念及使用

4.2全缺省和半缺省 

​编辑 5.函数重载

5.1函数重载的使用

5.2函数重载的底层原理


C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式
等。熟悉C语言之后,对C++学习有一定的帮助,本篇博客主要目标:

  • 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。
  • 为后续类和对象学习打基础。

1.C++关键字 

C++总计63个关键字,C语言32个关键字

这些关键字不需要特别记


 2.命名空间

2.1局部变量和全局变量

C语言中,局部变量优先于全局变量

int a = 10;
void f1()
{
	int a = 1;
	printf("%d\n", a);//运行结果为1
}

在有局部变量的情况下,如何使用全局变量

在全局变量前面加::(域作用限定符

int a = 10;
void f1()
{
	int a = 1;
	printf("%d\n", a);//运行结果为1
	printf("%d\n", ::a);//运行结果为10
}

C语言在 变量重命名的时候,但都不能被改变量名时,没有很好的办法解决

2.2命名空间的概念及使用

命名空间(namespace)——命名空间域,只影响使用,不影响生命周期

c++当变量重命名的时候,但都不能被改变量名时,就需要命名空间

命名空间可以嵌套,甚至可以多次嵌套

 变量放在命名空间内

namespace Bbit
{
	struct node
	{
		struct node* next;
		int val;
	};
	struct queue
	{
		struct node* head;
		struct node* tail;
	};
	int min = 1;
}
using namespace Abit;
using namespace Bbit;
int main()
{
	//struct node a;//默认在局部和全局找,而现在结构体在命名空间内
	struct Abit::node a;
	struct Bbit::node b;
	Abit::min++;
	cout << "12346" << endl;
	Bbit::min++;
	return 0;
}
  • 当变量不是放在命名空间时,变量默认在局部和全局找。
  • 当变量放在命名空间时,变量默认先去命名空间找,然后再去局部和全局找。

2.3std命名空间

std是C++标准库的命名空间

1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对
象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模
大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +
using std::cout展开常用的库对象/类型等方式。


3.C++输入&输出

cin标准输入流,cout标准输出流

  • 1.使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  • 2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。
  • 3. <<是流插入运算符,>>是流提取运算符。
  • 4.cin,cout会自动识别类型,不需要%d %s

int main()
{
	//<<流插入
	//endl 相当于换行符
	cout << "hello world" << endl;
	cout << "hello world" << endl;
	int i;
	//>>流输出
	cin >>i ;
	return 0;
}

 4.缺省参数

4.1缺省参数的概念及使用

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。

缺省参数说的简单点,就是给函数参数写默认值

返回值类型 函数名 (参数类型 参数名=x)(x为任意常数/全局变量)

有缺省参数时:

  • 当函数调用的时候,有传函数参数时,就用传过来的函数参数,没有传函数参数就用缺省参数的值
void func(int a=10)//这里的a就是缺省参数
{
	cout << a << endl;
}
int main()
{
func();
return 0;
}

4.2全缺省和半缺省 

缺省参数的使用分为全缺省和半缺省

  • 全缺省:有n个函数参数,就需要设置n个缺省参数
  • 半缺省:有n个函数参数,设置k(n>k>0)个缺省参数

半缺省的规则:

 半缺省必须从右往左缺省

在有缺省参数的情况下,只能不给有缺省参数的函数参数传值,没有缺省参数的函数必须传值 

void func1(int a = 10, int b = 20, int c = 30)
{//全缺省
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}
int main()
{
	/*func(15);
	func();*/
	func1(1, 2, 3);
	func1(1, 2);
	func1(1);
	func1();
	//func1(, 20, );//跳着传不可以
	return 0;
}
  • 声明和定义缺省参数不能在函数声明和定义中同时出现

 5.函数重载

5.1函数重载的使用

 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这
些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型
不同的问题。

函数重载:

  • 1.函数名和返回类型相同
  • 2.参数个数 或 类型 或 类型顺序有一种或者多种不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}
double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}

5.2函数重载的底层原理

C语言中函数调用是通过函数名进行查找的。

C++函数重载后,很明显就不可以通过函数名查找,通过函数的修饰名查找

由于Windows下vs的修饰规则过于复杂,而Linux下g++的修饰规则简单易懂,下面我们使
用了g++演示了这个修饰后的名字。 
通过下面我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成

  • 【_Z+函数长度+函数名+类型首字母】。

 vs的情况

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

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

相关文章

本硕985计算机,34岁的字节大头兵,上司很器重我,给我加薪不少,但国企也欢迎我,好犹豫该不该去国企!...

互联网VS国企&#xff0c;该怎么选&#xff1f;这是一位34岁的字节程序员面临的选择&#xff1a;在头条是2-2大头兵&#xff0c;本硕985计算机&#xff0c;国企还是比较欢迎他的。原本的想法是在私企干几年&#xff0c;如果干不成管理就去国企。如今没当成管理&#xff0c;但上…

【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式省赛(第二场)程序设计试题及其题解

原题展示 &#x1f4c4; 本试题目的是制作一个商品管理系统&#xff0c;其主要功能为&#xff1a;购买商品、增加商品储量、调节商品价格、查询商品价格&#xff0c;并且能够保存改变后的商品数量与商品价格&#xff0c;总体上看跟第一场的试题差不多&#xff0c;下面就让我们一…

Python Selenium 获取动态网页指定元素的超链接

Python Selenium 获取动态网页指定元素的超链接前言前提条件相关介绍实验环境获取动态网页指定元素的超链接目标网址代码实现前言 本文是个人使用Python Selenium 获取动态网页指定元素的超链接的电子笔记&#xff0c;由于水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评…

详解浮点数在内存中的存储

目录 前言 一、 32 位单精度浮点数在内存中的存储 1.1 - 符号位 sign 1.2 - 偏移后的指数位 biased exponent 1.3 - 尾数位 fraction&#xff08;mantissa&#xff09; 二、64 位双精度浮点数在内存中的存储 三、浮点数的比较 前言 计算机内部实际上只能存储和识别二进制…

IPV6相关

目录 一、IPV6地址组成与专业术语 1.基础分类 2.本地链路地址范围区域概念 3.本地环回地址 二、centos配置IPV6地址 1.终端命令配置IPV6地址和网关 2.文件中配置IPV6地址 三、IPV6连通测试 1.全局单播地址进行ping 一、IPV6地址组成与专业术语 1.基础分类 IPv6基础知…

对话开发者:Serverless 落地的困境与破局

作者 | 阿里云开发者社区、InfoQ 从 2012 年提出 Serverless 到今年 2022 年刚好十年。 过去十年&#xff0c;上云是确定性趋势&#xff0c;在这个阶段企业一开始的关注点在于如何实现平滑上云。随着越来越多的企业上云&#xff0c;甚至很多企业系统第一天就是在云上构建&…

7-2 出生年

以上是新浪微博中一奇葩贴&#xff1a;“我出生于1988年&#xff0c;直到25岁才遇到4个数字都不相同的年份。”也就是说&#xff0c;直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求&#xff0c;自动填充“我出生于y年&#xff0c;直到x岁才遇到n个数字都不相同的…

【数据结构与算法——C语言版】5. 排序算法(1)——冒泡排序

前言 上篇文章【数据结构与算法——C语言版】4. 排序算法&#xff08;1&#xff09;——选择排序我们介绍了排序算法中的选择排序&#xff0c;其时间复杂度是O(n2)&#xff0c;本篇文章我们将介绍另一种同样时间复杂度是O(n2)的排序算法——冒牌排序&#xff0c;这两种算法思路…

面向对象编程看这一篇文章就够了

第一章 面向对象和面向过程 面向对象(OOP[Object Oriented Programming])和面向过程(POP[procedure oriented programming])都是一种软件编程设计思想 1. 面向过程强调功能行为 2. 面向对象是将功能封装进对象,强调具备了功能的对象 3. 面向对象强调运用人类在日常的思维逻辑中…

Java 程序员都该懂的 HashMap

HashMap 一直是非常常用的数据结构&#xff0c;也是面试中十分常问到的集合类型&#xff0c;今天就来说说 HashMap。 但是为什么要专门说明是 Java8 的 HashMap 呢&#xff1f;我们都知道&#xff0c;Java8 有很多大的变化和改动&#xff0c;如函数式编程等&#xff0c;而 Hash…

SpringBoot 请求参数处理详解

目录 请求参数处理 0、请求映射 1、rest使用与原理 1、普通参数与基本注解 1.1、注解&#xff1a; 1.2、Servlet API&#xff1a; 1.3、复杂参数&#xff1a; 1.4、自定义对象参数&#xff1a; 2、POJO封装过程 3、参数处理原理 1、HandlerAdapter 2、执行目标方法…

maplab2.0安装

项目链接: GitHub - ethz-asl/maplab: An open visual-inertial mapping framework. 安装流程很简单.按照github流程安装就行,建议使用脚本自动安装, 安装指南: https://maplab.asl.ethz.ch/docs/master/pages/installation/A_Installation-Ubuntu.html 值得注意的点包括: 1…

【阶段二】Python数据分析数据可视化工具使用03篇:词云图与相关性热力图

本篇的思维导图: 词云图 词云图(word cloud chart)是通过使每个字的大小与其出现频率成正比,显示不同单词在给定文本中的出现频率,然后将所有的字词排在一起,形成云状图案,也可以任何格式排列:水平线、垂直列或其他形状,也可用于显示获分配元数据的单词。在词云…

2022 OpenMLDB 硕果累累,颁奖台上荣耀连连

岁末年初&#xff0c; 既是回望过去和规划未来的日子&#xff0c; 也是总结成长与收获成果的时间。 2022 年即将结束之际&#xff0c; OpenMLDB 在颁奖台上惊喜连连&#xff0c; 获得了 IT168 和 中国开源云联盟 的认可。 技术改变世界&#xff0c;创新引领未来。业界知名 IT…

Redis缓存穿透、缓存击穿、缓存雪崩详解

缓存处理流程接收到查询数据请求时&#xff0c;优先从缓存中查询&#xff0c;若缓存中有数据&#xff0c;则直接返回&#xff0c;若缓存中查不到则从DB中查询&#xff0c;将查询的结果更新到缓存中&#xff0c;并返回查询结果&#xff0c;若DB中查不到&#xff0c;则返回空数据…

PSR规范

PSR规范 PSR 不是PHP官方标准&#xff0c;而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准&#xff0c;目前有越来越多的社区项目加入并遵循该标准。 PSR-0 自动加载 X已废弃 PSR-1 基本代码规范 PSR-2 代码样式 PSR-3 日志接口 PSR-4 如何指定文件路径从而自动加载…

怎么搭建自己的网站赚钱,个人网站怎么操作

大家好&#xff0c;我是蝶衣王的小编接触过互联网的应该很多都想过能不能搭建自己的网站赚钱&#xff0c;无论是用来带货&#xff0c;引流&#xff0c;还是做广告都会是一笔不错的收入&#xff0c;而且网站做好之后打理起来简单&#xff0c;后期工作量也是比较小的&#xff0c;…

【论文简述】Vis-MVSNet: Visibility-Aware Multi-view Stereo Network(IJCV 2022)

一、论文简述 1. 第一作者&#xff1a;Jingyang Zhang 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;IJCV、BMVC 4. 关键词&#xff1a;MVS、可见性、MVSNet 5. 探索动机&#xff1a;MVS的可见性 One critical factor in MVS is the pixel-wise visibility: whet…

Clion配置导致中文乱码问题 char长度限制导致中文乱码问题

&#x1f370; 个人主页:__Aurora__ &#x1f35e;如果文章有什么需要改进的地方还请各位大佬指正。 &#x1f349;如果我的文章对你有帮助➡️ 关注&#x1f64f;&#x1f3fb; 点赞&#x1f44d; 收藏⭐️ 问题1&#xff1a;中文乱码问题&#xff08;配置原因&#xff09; #…

【Linux】复制进程、了解逻辑地址以及写实拷贝

目录 fork()方法原型 父子进程 父子进程的pid 物理地址和逻辑地址 写实拷贝 fork()方法原型 pid_t fork(void); pid_t是int类型代表进程的pid号 Linux内核2.4.0定义&#xff1a; typedef int __kernel_pid_t; typedef __kernel_pid_t pid_t; 每一个进程的pid都是唯一…