【C++第一章】命名空间和缺省参数

本文介绍了C++的基础知识,包括C++的起源、关键字的使用,特别是命名空间的概念和作用,以及如何解决命名冲突。此外,详细探讨了缺省参数的功能和使用场景,帮助理解函数参数的默认值设定及其在实际编程中的应用。
摘要由CSDN通过智能技术生成

🎆前言🎆

✨笔者也仅是大一萌新,写博客为了记录和巩固知识✨

🥰赠人玫瑰,手留余香,欢迎各位读者进行交流和建议🥰

🌹能与大家一起学习,一起进步是我的荣幸🌹

🤞如果这篇文章有帮助到您,还请留个赞支持一下哦🤞


1

目录:

  1. 什么是C++
  2. C++的关键字(基于C++98版本)
  3. 命名空间
  4. 缺省参数/默认参数

🔎 1.什么是C++

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(objectoriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

🔎 2.C++的关键字(基于C++98版本)

C++总计63个关键字,拥有C语言32个关键字,笔者将会在之后的博客中进行部分重要关键字讲解

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

🔎3.命名空间

🤔为什么存在命名空间?

C语言中我们一定会遇到这种问题,当定义的标识符过多(或者用了同函数名)时,我们可能会出现重定义的情况,在C++中使用namespace解决了这个问题,命名空间隔离的是命名冲突,不影响生命周期。相同命名空间会合并在一起

🤔使用命名空间作用域:

下图中,我们可以发现,在a被定义过的情况下,我们使用namespace定义了一个命名空间域AA,此时当我们使用AA::a(格式:命名空间名::成员名)时就能够拿到命名空间中所定义的值,命名空间里面可以包含:变量、函数、类、typedef、#define,但是同一个域中也不能有同名变量

image-20220426124630159

另外,"::"是C++中的域作用限定符,它的左边一般放类名称,后面一般是该类的成员名称,当::左边没有类时,它就会在全局变量中找我们所定义成员。

image-20220426125804475

🤔命名空间嵌套释放

嵌套

如下图,我们在AA的命名空间域中又定义了一个命名空间,此时我们要用A中的a就只需要再加一个域进去就可以输出

image-20220426130806543

另外,在c++中增加了类,于是有了流提取cin和流插入cout的输入输出方法,用法如下(endl是换行):

image-20220426131635398

cin和cout还能自动读取数据的类型,而scanf和printf需要自己标明数据类型

image-20220426140531161

释放

关于命名空间的释放,我们来看下面的例子:

image-20220426140750814

此时我们不用AA的命名空间域则无法使用变量b和A中的变量

image-20220426141434017

image-20220426141445109

我们可以进行如下操作不使用AA的命名空间域(当然也可以继续使用):

image-20220426141246374

不过我们释放命名空间域时,会把整个作用域放开,难免会出现重定义的情况,所以我们可以只放命名空间域的指定变量,该命名空间域的其他变量还是无法直接使用:

image-20220426142016591

image-20220426142126369

拓展流提取和流插入

1."<<“和”>>"分别是流插入运算符,流提取运算符,它们也是位移操作符

2.实现hello world的三种方式:

方法一:

直接释放std,不过有可能使用到标准库中的函数(影响也不大)

image-20220426143834656

方法二:

使用作用域,过于麻烦

image-20220426144014044

方法三:

需要什么释放什么

image-20220426145028742

🔎4.缺省参数/默认参数

缺省参数是声明或定义函数时为函数的参数指定⼀个默认值,当调用时没有传参就会使用默认值,传了参就会使用传参值

🧐全缺省

函数的形参全都具有默认值,指定传参只能按顺序传,如Test2中我们只能abc依次指定传参,无法直接给b或者c传参

image-20220426145709775

🧐半缺省

函数的形参不是全部具有默认值,此时不具有默认值的参数必须要传一个实参进去,半缺省必须是从右往左缺省,并且要是连续的

image-20220426150311632

🧐缺省参数的实际用法

在我们使用顺序表或者栈时,进行动态内存开辟一般操作都是用三目操作符,而使用缺省参数可以帮助我们简化,在初始化时就进行第一次空间开辟,并且可以指定第一次开辟的大小

image-20220426150827966

🧐缺省参数的声明和定义

缺省参数不能在函数声明和定义中同时出现

其一般情况是声明缺省,定义不缺省

如:

//Test.h
void Test(int a = 10);
//Test.c
void Test(int a = 20);
//此时,如果传了参还能够使用,如果没有传参,那么编译器就无法确该用哪个缺省值,所以一般是声明缺省,定义不缺省
//Test.h
void Test(int a = 10);
//Test.c
void Test(int a);

🧐最后

缺省值必须是常量或者全局变量

C语言不支持缺省参数(编译器不支持)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A.A呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>