既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
文章目录
写在前面
开始入坑C++了,嗐,说实话细节有好多,怎么说呢,我相信,今天是灰色的,明天是灰色的,后天一定是美好的,加油吧少年们。
一、C++关键字
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 | defualt |
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++中,变量、函数和类型都是大量存在的。如果全部存在于全局作用域中,可能会导致许多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突和名字污染,namespace关键字的出现就是针对这种问题的。
例题:
#include<stdio.h>
int rand = 0;
int main()
{
printf("%d\n", rand);
return 0;
}
上面的代码是没有问题的,但是加上这个头文件之后程序就挂了。
#include<stdio.h>
#include<stdlib.h>
int rand = 0;
int main()
{
printf("%d\n", rand);
return 0;
}
rand()是一个库函数存在于stdlib.h头文件中,而在编译的时候头文件会展开,这时候变量rand和库函数rand都存在与同一个作用域中(全局作用域)
从上面的错误示范中可以得到,同一个作用域里面不可以出现同名变量,因为会导致命名冲突,在C语言中没有很好地解决这个问题,但在C++中引入namespace来解决它,在命名空间中定义变量,函数,类型均可。
那怎么改才是对的呢?
#include<stdio.h>
#include<stdlib.h>
namespace SL//命名空间域
{
int rand = 0;
}
int main()
{
printf("%d\n", SL::rand);//::域作用域限定符,如果左边是空白,则默认是全局作用域中的rand
return 0;
}
1.命名空间的定义
定义命名空间,需要使用namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
普通命名空间的定义
namespace SL//SL为命名空间的名称
{
//命名空间中的内容,即可以定义变量、函数、还可以定义类型
int a = 0;
int Add(int x, int y)
{
return x + y;
}
struct Node
{
int val;
struct Node\* next;
};
}
命名空间支持嵌套和重名
namespace byte
{
int a = 0;
namespace data//命名空间可以嵌套,一般多是2~3层
{
struct Node
{
int val;
struct Node\* next;
};
}
}
//在同一工程中允许存在多个相同名称的命名空间,编译器最后会合并在同一个命名空间中
namespace byte
{
int b = 0;
namespace cache
{
struct Node
{
int val;
struct Node\* next;
}
}
}
注意:
定义一个命名空间就相当于定义了一个新的作用域,命名空间中的内容都局限于该命名空间中;
命名空间不会影响变量的生命周期,而且命名空间的定义只能是全局的,不能在局部中定义,比如在main函数中定义就是错误的,而且一般命名空间是定义在头文件下的。
总结:
- 命名空间中的内容:可以定义变量、函数,还可以定义类型;
- 命名空间支持嵌套(防止工程太大导致命名冲突);
- 同名的命名空间是允许同时存在的,编译器编译时会自动合并。
2.命名空间的使用
//意思是把byte这个命名空间中的内容放出来
using namespace byte;
//这两行代码的意思是先展开byte,再展开data,如果颠倒顺序是错误的,而且意义不等同于using namespace byte::data;
using namespace data;
//注意哦,这里展开的是byte中的cache,并没有将byte展开
using namespace byte::cache;
using的意义:将命名空间中的内容全部或部分放出来。
using namespace byte;//全部放出来
using namespace byte::a;//部分放出来
命名空间的三种使用方式:
- 加命名空间名称及作用域限定符
std::cout << byte::a << std::endl;
- 使用using将命名空间中成员引入(通常用来放部分常用的)
using std::cout;
using std::endl;
using byte::a;
cout << a << endl;
cout << byte::b << endl;
- 使用using namespace命名空间引入(放了全部)
using namespace byte;
using namespace std;
//std是C++标准库的命名空间,全部放出来虽然方便使用了,但是存在冲突风险,所以我们平时在写一些练习不在乎冲突的时候,可以将它全部放出来,正常情况下没必要全部放出来
三、C++输入&输出
下面看看C++是如何向世界打招呼的:
#include<iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
说明:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
return 0;
}
说明:
[外链图片转存中...(img-CVZwJWcO-1715523517157)]
[外链图片转存中...(img-1aOTnK3m-1715523517157)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**