🎆前言🎆✨笔者也仅是大一萌新,写博客为了记录和巩固知识✨
🥰赠人玫瑰,手留余香,欢迎各位读者进行交流和建议🥰
🌹能与大家一起学习,一起进步是我的荣幸🌹
🤞如果这篇文章有帮助到您,还请留个赞支持一下哦🤞
目录:
🔎 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个关键字,笔者将会在之后的博客中进行部分重要关键字讲解
asm do if return try continue auto double inline short typedef for bool dynamic_cast int signed typeid public break else long sizeof typename throw case enum mutable static union wchar_t catch explicit namespace static_cast unsigned default char export new struct using friend class extern operator switch virtual register const false private template void true const_cast float protected this volatile while delete goto reinterpret_cast
🔎3.命名空间
🤔为什么存在命名空间?
C语言中我们一定会遇到这种问题,当定义的标识符过多(或者用了同函数名)时,我们可能会出现重定义的情况,在C++中使用namespace解决了这个问题,命名空间隔离的是命名冲突,不影响生命周期。相同命名空间会合并在一起。
🤔使用命名空间和作用域:
下图中,我们可以发现,在a被定义过的情况下,我们使用namespace定义了一个命名空间域AA,此时当我们使用AA::a(格式:命名空间名::成员名)时就能够拿到命名空间中所定义的值,命名空间里面可以包含:变量、函数、类、typedef、#define,但是同一个域中也不能有同名变量
另外,"::"是C++中的域作用限定符,它的左边一般放类名称,后面一般是该类的成员名称,当::左边没有类时,它就会在全局变量中找我们所定义成员。
🤔命名空间的嵌套和释放
嵌套:
如下图,我们在AA的命名空间域中又定义了一个命名空间,此时我们要用A中的a就只需要再加一个域进去就可以输出
另外,在c++中增加了类,于是有了流提取cin和流插入cout的输入输出方法,用法如下(endl是换行):
cin和cout还能自动读取数据的类型,而scanf和printf需要自己标明数据类型
释放:
关于命名空间的释放,我们来看下面的例子:
此时我们不用AA的命名空间域则无法使用变量b和A中的变量
我们可以进行如下操作不使用AA的命名空间域(当然也可以继续使用):
不过我们释放命名空间域时,会把整个作用域放开,难免会出现重定义的情况,所以我们可以只放命名空间域的指定变量,该命名空间域的其他变量还是无法直接使用:
拓展流提取和流插入
1."<<“和”>>"分别是流插入运算符,流提取运算符,它们也是位移操作符
2.实现hello world的三种方式:
方法一:
直接释放std,不过有可能使用到标准库中的函数(影响也不大)
方法二:
使用作用域,过于麻烦
方法三:
需要什么释放什么
🔎4.缺省参数/默认参数
缺省参数是声明或定义函数时为函数的参数指定⼀个默认值,当调用时没有传参就会使用默认值,传了参就会使用传参值
🧐全缺省
函数的形参全都具有默认值,指定传参只能按顺序传,如Test2中我们只能abc依次指定传参,无法直接给b或者c传参
🧐半缺省
函数的形参不是全部具有默认值,此时不具有默认值的参数必须要传一个实参进去,半缺省必须是从右往左缺省,并且要是连续的
🧐缺省参数的实际用法
在我们使用顺序表或者栈时,进行动态内存开辟一般操作都是用三目操作符,而使用缺省参数可以帮助我们简化,在初始化时就进行第一次空间开辟,并且可以指定第一次开辟的大小
🧐缺省参数的声明和定义
缺省参数不能在函数声明和定义中同时出现
其一般情况是声明缺省,定义不缺省
如:
//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语言不支持缺省参数(编译器不支持)