c++关键字,命名空间,缺省参数,函数重载,引用,内联函数auto等学习(上)

简介: c++关键字,命名空间,缺省参数,函数重载,引用,内联函数auto等学习(上)

前言



C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式


等。熟悉C语言之后,对C++学习有一定的帮助。

c++补充了C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。


一、c++关键字



c++一共有63个关键字,C语言32个关键字,也就是说c++在C语言的基础上多了一倍的关键字


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      


二、命名空间



命名空间是为了防止自己的命名与c/c++库中的名称相同而不能使用,有了命名空间后,以前不能在c语言中使用的名称可以在命名空间中使用,要访问只需要在前面加上域作用限定符即可。当然,关键字是不能使用的即使在命名空间也不行


be7ba2845b054dcf86f2cca0a0c8929f.png


rand以前是随机数的函数,现在被我们定义成了int变量,所以报错人的重定义。想要解决这样的问题就需要命名空间。


63e0dd8eb1064a69a9854cd3a60c3b9d.pngdd5edefc5d854b3d8a6a1f3b15356710.png


从图中我们可以发现,除了关键字不能使用像库中的函数名等都可以在命名空间使用。


当然命名空间也支持嵌套:


ad2b6985350443ee89d417ea9d5b289c.png

69a1049ff4b24c0bb7c4e583f2c8335f.png


如上图所示, 对于要访问命名空间中的命名空间只需要加入合适的域名限定符即可。


在同一个工程中允许存在多个相同名称的命名空间,编译器最后会把他们合成到一个命名空间中。


一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。


当然命名空间不仅仅有上图中一种使用方式,下面是三种方法的对比:


加命名空间名称及作用域限定符。

5945fcf1435c42918f4c930265cee3e2.png


这就是我们使用的那个方法。


使用using将命名空间中某个成员引入。


45d9b8e71ee74dc980495416b758eb30.png


使用using namespace命名空间名称引用

e9fc6dc120da409fa07b79a7eea571c5.png


三:c++输入和输出



std是c++标准库的命名空间名,c++将标准库的定义实现都放在这个命名空间中。


168d691f2788423ca52cf46acdd2b77e.png

45413da2c0db45ccaf26314b6b64c331.png

 

1.使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含<iostream>头文件以及按命名空间使用方法使用std;


2.cout和cin是全局的流对象,endl是特殊的c++符号,表示换行输出,他们都包含在<iostream>头文件中。


3.<<  是流插入运算符, >> 是流提取运算符。


4.使用c++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。c++的输入输出可以自动识别变量类型。


四:缺省参数



缺省参数就是声明或定义函数时为函数的参数指定一个缺省值,如果你在调用这个函数的时候没有传参数,那么这个函数的参数的值就是缺省值,如果你在调用这个函数的时候传了参数,那么这个函数的参数的值就是你所传参数的值。

1ed36390ef444aed9853637a5705a8c2.png


缺省又分为全缺省和半缺省,全缺省的意思就是函数的每个参数都给了缺省值,半缺省的意思就是函数的参数只给了个别的缺省值。

6528d3827e7a42a3a79fe0bedc686044.png9bde74cfa9ca4f4997d802bba6b0e023.png


1.半缺省参数必须从右往左依次来给出不能间隔着给,比如上图49行代码应该从z开始依次向左给出。


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


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


五:函数重载



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


第一种: 参数类型不同


void test(int x, int y)
{
  cout << "test(int x,int y)" << endl;
}
void test(double x, double y)
{
  cout << "test(double x,double y)" << endl;
}
int main()
{
  int a = 10, b = 20;
  double x = 1.22, y = 3.22;
  test(a, b);
  test(x, y);
  return 0;
}

c45123be818c487ab3c7498490bb1d27.png


第二种:参数个数不同

void test(int x)
{
  cout << "test(int x)" << endl;
}
void test()
{
  cout << "test()" << endl;
}
int main()
{
  int a = 10;
  test(a);
  test();
  return 0;
}

cdc31cad9eaf401b853f9e06f09d24a7.png


第三种:参数类型顺序不同


void test(int x, char y)
{
  cout << "test(int x,char y)" << endl;
}
void test(char y, int x)
{
  cout << "test(char y,int x)" << endl;
}
int main()
{
  int a = 10;
  char c = 'a';
  test(a,c);
  test(c,a);
  return 0;
}

21ff86426c0b4204bbcf64355319ebbc.png


以上就是函数重载的演示,不知道大家有没有想过为什么函数返回值不能做函数重载呢?


因为如果返回值可以重载的话那么你在调用函数传参的时候该怎么区分呢?如下图

d29338368d154820b737cdcf3060ab1e.png

两个函数都传一个int类型的参数编译器根本无法区分到底调用哪个。


由于windows下函数重载命名的方式太过复杂,我们在linux环境下看g++编译完成后函数名字的修饰是如何改变的。


f78358e1226c4e6e8d3b8fb812afe35a.png

9b021f8bd4ce4b1081f32647ae3f67d5.png


我们可以发现testii和testdd就是test的两个函数,编译器通过函数参数不同去命名不同的函数。


目录
相关文章
|
15天前
|
程序员 C++
C++中的函数重载有什么作用
【10月更文挑战第19天】C++中的函数重载有什么作用
13 3
|
1月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
15天前
|
编译器 程序员 C++
C++中的函数重载是什么
【10月更文挑战第19天】C++中的函数重载是什么
13 0
|
2月前
|
安全 程序员 编译器
C++ 11新特性之auto和decltype
C++ 11新特性之auto和decltype
37 3
|
1月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
自然语言处理 编译器 Linux
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
|
1月前
|
程序员 C++ 开发者
C++入门教程:掌握函数重载、引用与内联函数的概念
通过上述介绍和实例,我们可以看到,函数重载提供了多态性;引用提高了函数调用的效率和便捷性;内联函数则在保证代码清晰的同时,提高了程序的运行效率。掌握这些概念,对于初学者来说是非常重要的,它们是提升C++编程技能的基石。
21 0
|
3月前
|
编译器 程序员 C语言
C++函数重载
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似: void swap1(int *a, int *b); //交换 int 变量的值 void swap2(float *a, float *b); //交换 float 变量的值 void swap3(char *a, char *b); //交换 char 变量的
C++函数重载
|
2月前
|
C语言 C++
C++(三)内联函数
本文介绍了C++中的内联函数概念及其与宏函数的区别。通过对比宏函数和普通函数,展示了内联函数在提高程序执行效率方面的优势。同时,详细解释了如何在C++中声明内联函数以及其适用场景,并给出了示例代码。内联函数能够减少函数调用开销,但在使用时需谨慎评估其对代码体积的影响。
|
3月前
|
存储 编译器 C++
【C++关键字】auto的使用(C++11)
【C++关键字】auto的使用(C++11)