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


目录
相关文章
|
19天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
43 4
2023/11/10学习记录-C/C++对称分组加密DES
|
19天前
|
安全 编译器 C++
C++ `noexcept` 关键字的深入解析
`noexcept` 关键字在 C++ 中用于指示函数不会抛出异常,有助于编译器优化和提高程序的可靠性。它可以减少代码大小、提高执行效率,并增强程序的稳定性和可预测性。`noexcept` 还可以影响函数重载和模板特化的决策。使用时需谨慎,确保函数确实不会抛出异常,否则可能导致程序崩溃。通过合理使用 `noexcept`,开发者可以编写出更高效、更可靠的 C++ 代码。
25 0
|
3月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
3月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
31 1
|
3月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
63 2
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
113 5
|
2月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
115 4
|
2月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
152 4
|
3月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
35 4