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的两个函数,编译器通过函数参数不同去命名不同的函数。


目录
相关文章
|
1月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
安全 程序员 编译器
【C++】如何巧妙运用C++命名空间:初学者必备指南
【C++】如何巧妙运用C++命名空间:初学者必备指南
|
2月前
|
安全 程序员 编译器
C++ 11新特性之auto和decltype
C++ 11新特性之auto和decltype
39 3
|
1月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
自然语言处理 编译器 Linux
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
|
1月前
|
程序员 C++ 开发者
C++入门教程:掌握函数重载、引用与内联函数的概念
通过上述介绍和实例,我们可以看到,函数重载提供了多态性;引用提高了函数调用的效率和便捷性;内联函数则在保证代码清晰的同时,提高了程序的运行效率。掌握这些概念,对于初学者来说是非常重要的,它们是提升C++编程技能的基石。
21 0
|
2月前
|
程序员 C++ 容器
C++编程基础:命名空间、输入输出与默认参数
命名空间、输入输出和函数默认参数是C++编程中的基础概念。合理地使用这些特性能够使代码更加清晰、模块化和易于管理。理解并掌握这些基础知识,对于每一个C++程序员来说都是非常重要的。通过上述介绍和示例,希望能够帮助你更好地理解和运用这些C++的基础特性。
41 0
|
1天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
14 2
|
8天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
33 5
|
14天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
46 4