C++ 命名空间、域、缺省参数、函数重载、引用、auto、内联函数的知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)

简介: C++ 命名空间、域、缺省参数、函数重载、引用、auto、内联函数的知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)

绪论

       从本章开始我们正式进入到C++的内容,对此如果没有学习过C语言的建议先将C语言系统的学习一遍后再来(已经更新完在专栏就能看到)。

image.png

话不多说安全带系好,发车啦(建议电脑观看)。


思维导图:

image.png

要XMind思维导图的话可以私信哈


目录


1.C++关键字

2.命名空间(namespace)

2.1命名空间

2.1.1 域:

2.1.2命名空间域的展开:

3.C++的输入和输出

4.缺省参数(默认参数)

5.函数重载

6.引用

6.1引用的定义:

6.2使用场景:

6.3常引用问题

6.4引用的总结:

7.关键字auto

8.范围for

9.内联函数

10.指针空值nullptr

1.C++关键字

知识点:

C++的关键字的含义和C语言中一样都是有特殊意义的名称,我们在创建变量的时候不能使用相同的名。


细节:

下面是C++中的63个关键字,我们不需要去死记,通过不断学习自然就记住了。

image.png

2.命名空间(namespace)

2.1命名空间

在C语言中会有命名冲突的问题,在c++中为了避免一个项目中不同程序员写的代码(或者程序员写的变量名和库函数的函数名)发生命名的冲突,就推出了命名空间这个概念来解决命名冲突这个问题。对此命名空间内可以定义变量、函数、结构体、再嵌套一个命名空间  ......

知识点:

2.1.1 域:

域一般分为:全局域、局部域、作用域(C语言已讲)、命名空间域、类域

细节:

下面通过代码来展示不同的域:

namespace ZYK
{
    int a = -1;//在命名空间的变量,就是命名空间域
}
int a = 1;//全局域
int main()
{
    int a = 0;//在局部变量中就是局部域,和局部变量非常类型
    return 0;
}

对于域的使用优先级一般是:局部域 , 全局域

若加上了 域作用限定符 : “ :: ” 的话则会更先执行限定符指定的空间,域作用限定符的使用是:左边是命名空间名 ::右边则是要执行的变量名

当没有指定/展开命名空间域时在搜索变量时并不会自动去命名空间域内去搜索,命名空间域时DIY名称的。

对于全局域来说他的域名就是空(即当不输入域名时就代表要访问全局域)

2.1.2命名空间域的展开:

知识点:

他的意思和他的名字一样:

就是把一个命名空间进行了展开,直接展开到了全局域中,所以要注意的是如果全局域有和命名空间域相同的变量名时就会报错(命名不明确),对此我们反思到,在一般情况下我们加上这个命名空间就是为了防止这种情况,所以我们一般看情况展开(在一多人合作的项目中我们不能进行展开、而在日常自己练习和单独完成的项目我们可以适当的进行展开)

基本语法:

using + namesapce + 命名空间名

来展开对应的命名空间

附:当同时定义了多个相同名的命名空间时,此时会将这几个相同的命名空间进行合并,同样也不能有相同的变量名

                                               下面通过练习来实践:

练习:

1. 在有局部域和全局域以及命名空间域的同时,先执行全局域再执行命名空间域最后访问局部域:


 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
namespace ZYK
{
    int a = -1;//在命名空间的变量,就是命名空间域
}
int a = 1;
int main()
{
    int a = 0;
    printf("%d\n", ::a);
    printf("%d\n", ZYK::a);
    printf("%d\n", a);
    return 0;
}

image.png

2. 对于嵌套的来说其大体使用方法一样(嵌套的指定即可):

这里就不过多的去叙述了,直接通过代码来展示:

image.png

3. 展开命名空间:

namespace ZYK
{
    int a = -1;
}
using namespace ZYK;
int main()
{
    int a = 0;
    printf("%d\n", ::a);
    printf("%d\n", ZYK::a);
    printf("%d\n", a);
    return 0;
}

image.png

3.C++的输入和输出

知识点:

std是C++的标准库的命名空间的域名,C++的标准库的定义和实现都放在了这个命名空间内(和C语言中的 stdio.h 这个头文件有点类似 在std中包含的则是C++标准库的函数)

image.png




细节:

上面我们知道了c++中有一个命名空间名std ,他其中包含了许多函数,所以为了使用一个命名空间内的函数。我们就有两种方法也就是域作用限定符来指定/展开命名空间域

但是要注意的是并不是展开/指定了就能使用该函数了,同样要先用#define包含头文件,再通过std来间接的访问函数。所以说这两样东西缺一不可。

练习:

1. cout、endl

一般来说cout 和 endl 是同时使用的,

cout:(可以大概的理解成我们程序的那个黑框框)可以将 <<  (流插入运算符) 流进来的进行打印

endl:其实可以大概的看成  \n

cout 相较于printf来说:他可以连续一行插入多个数据,并且可以自动识别类型


附:而cin流提取运算符(类似scanf)

练习使用方法如下:

第一种方法:

image.png一个正常使用该cout、endl时我们需要加上的条件:

头文件:#include<iostream>  、 展开std命名空间
优点:可以能更加便捷的使用
缺点:同样直接把一个命名空间打开是一个非常危险的举动


第二种方法:

image.png

此时我们并没有去展开一个命名空间,通过指定访问的方法来实现

但是:不要忘记了头文件#include<iostream>

优点:没有了展开命名空间的风险

缺点:若要多次使用则会些冗杂


第三种方法(也是比较推荐的方法):

image.png

这种方法是将所要用到的进行单独的展开,我们可以在常用的对应进行展开,而不常用的直接使用第二种方法

头文件 #include<iostream>(不能省略)


附:cout的自动识别的展示、以及因为自动识别而导致的精度丢失的问题(缺点)

image.png

附:在c++中可以写c的语法,因c++是兼容c的(所以我们printf和cout混着使用)


4.缺省参数(默认参数)

知识点:

在函数的形参部分加上一个初始值(缺省参数),当你没传参数时就会用缺省参数,如果你传了参数那就正常的使用传来进的参数值。


细节:

当我们同时有多个形参时,对于缺省参数的使用情况大概和单个时的情况差不多但是要注意的是:

传参时是从左往右依次传上去的(所以从左往右的算传几个算几个,若没传就用缺省参数)

并且不可以跳跃的来传递实参

缺省参数必须是从右往左的确立的(即若一半是正常形参一半是缺省形参时,此时正常形参必须在缺省形参的左边,这种形参别称为半缺省型,反之全缺省)

当我们分源管理时我们应该在哪里写这个缺省参数呢:

缺省参数应该只写在函数的声明处(因为怕出现声明和定义不同的问题),而不是写在定义处

练习:

1. 缺省参数的具体应用:

image.png

2. 传多个参数时要注意的点

a.不能跳跃传参

image.png

b.从左往右传参的

image.png

c.半缺省:(缺省参数必须从右往左,因为我们传参是从左往右的)

image.png

5.函数重载

知识点:

在C语言中我们无法同时使用多个相同函数名但类型不同的函数,所以c++就对这方面进行了优化,让同名当不同参数类型的函数可以正常使用


细节:

对于函数重载时的参数一般分为三类:


1、类型不同

image.png

2、类型的数量不同

image.png

3、类型的顺序不同

image.png

4、总结来说就是:两个同名的函数其函数类型不能对应相等即可

image.png

而对于为什么C语言不能对相同的函数名的函数进行函数调用而c++却可以:

是因为在编译链接阶段 创建的符号表中命名的函数命有区别 ,C语言是直接把函数名命名当成符号表,而c++在生成符号表时的命名规则并不是直接用函数名而是有不同的命名规则


因此对于C语言来说当出现两个相同函数名时,就会导致链接时冲突、

而对于c++来说就不会出现冲突因为类型的不同所以函数命名就会不同(在gcc环境下的函数名的命名规则是:_Z3funii   其中_Z是固定的 + 3 是函数名的字符个数 + 函数名 + 函数的类型 ii : 两个整形)

相关文章
|
2月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
安全 程序员 编译器
【C++】如何巧妙运用C++命名空间:初学者必备指南
【C++】如何巧妙运用C++命名空间:初学者必备指南
|
3月前
|
安全 程序员 编译器
C++ 11新特性之auto和decltype
C++ 11新特性之auto和decltype
48 3
|
2月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
3月前
|
程序员 C++ 容器
C++编程基础:命名空间、输入输出与默认参数
命名空间、输入输出和函数默认参数是C++编程中的基础概念。合理地使用这些特性能够使代码更加清晰、模块化和易于管理。理解并掌握这些基础知识,对于每一个C++程序员来说都是非常重要的。通过上述介绍和示例,希望能够帮助你更好地理解和运用这些C++的基础特性。
51 0
|
1月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
51 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
106 5
|
1月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
97 4
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
114 4
|
2月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
32 4