既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
int a = 0;
int main()
{
int a = 1;
/\*printf("%d\n", a);\*///1 先访问局部域
//::域作用限定符 左边空白就表示是全局域
printf("%d\n", ::a);//0
return 0;
}
2.2实例
当我们用C语言写一下代码的时候,会报错:
那么如何解决?
//命名空间
#include <stdlib.h>
namespace haha
{
int rand = 0;
}
int main()
{
printf("%p\n", rand);//局部
printf("%p\n", haha::rand);//指定去haha域里找
return 0;
}
用关键字namespace 定义一个命名空间域,就不会报错了
命名空间用来做名字隔离,防止命名冲突
命名空间里除了定义变量也可以定义函数、类型
在主函数中直接调用是找不到的,需要指定去找
namespace haha
{
int rand = 0;
void func()
{
printf("func()\n");
}
struvt TReeNode
{
struct TreeNode\* left;
struvt TreeNode\* right;
int val;
};
}
int main()
{
printf("%p\n", rand);//局部
printf("%p\n", haha::rand);//指定去haha域里找
haha::func();
struct haha::TreeNode node;
return 0;
}
2.3命名空间可以嵌套
namespace cc
{
namespace haha
{
int rand = 0;
void func()
{
printf("func()\n");
}
struvt TReeNode
{
struct TreeNode\* left;
struvt TreeNode\* right;
int val;
};
}
int main()
{
printf("%p\n", rand);//局部
printf("%p\n", cc::haha::rand);//指定去haha域里找
cc::haha::func();
struct cc::haha::TreeNode node;
return 0;
}
}
项目里四个文件都需要放进命名空间:
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
不指定也能用命名空间:
using namespace haha;定义域展开
主函数中就会先去全局域中找,找不到再去带展开的haha域中找
c++的特点是自动识别类型,不需要指定类型,直接打印出整型或浮点型之类的
#include <iostream>
//std是C++标准库的命名空间
using namespace std;
int main()
{
cout << "hello world" << endl;
// cout是对象,endl是换行符
//运算符<<流插入
int i = 11;
double d = 11.11;
printf("%d,%f\n",i,d);
cout<<i<<d<<endl;//自动识别类型
}
//如果不展开,怎么使用:
//using namespace std;
int main()
{
std::cout << "hello world" << std::endl;
std::cin;//控制台 scanf
//>>流提取
std::cin>>i>>d;
}
//只展开一部分,只展开常用的
using std::cout;
using std::cin;
总结
:
- 项目中尽量不要用using namespace std;
- 日常练习可以用using namespace std;
- 项目,指定命名空间访问+展开常用
3. 缺省参数
3.1 缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定一个默认值
。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参
void Func(int a = 0)
{
std::cout << a << std::endl;
}
//全缺省 调用灵活 参数从左往右 不能跳过前面的传后面
void TestFunc1(int a = 10, int b = 20, int c = 30)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
//半缺省(缺省部分) 必须连续的从右往左缺省,不能间隔
//(int a,int b=0,int c) 这种写法就是错的
//想要缺省a,就必须把bc都缺省了
void TestFunc2(int a, int b = 10, int c = 20)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
int main()
{
Func(1);//1
Func();//0
TestFunc1(1);
TestFunc1(1,2);
TestFunc1(1,2,3);
return 0;
}
3.2实际运用:
//栈
struct Stack
{
int\* _a;
int top;
int capacity;
};
void StackInit(struct Stack\* ps, int capacity = 4)//初始化
{
ps ->_a = (int\*)malloc(sizeof(int)\* capacity);
//...
ps->top = 0;
ps->capacity = capacity;
}
int main()
{
//知道我一定会插入100个数据,就可以显示传参数100
//提前开好空间,插入数据时就可以避免扩容(有代价)
struct Stack st1;
StackInit(&st1, 100);
struct Stack st2;
StackInit(&st2, 100);
return 0;
}
注意
:
- 半缺省参数必须从右往左依次来给出,不能间隔着给
- 缺省参数不能在函数声明和定义中同时出现
- 分离定义时:以声明为准,就算声明没给定义给了也不算
- 缺省值必须是常量或者全局变量
- C语言不支持(编译器不支持)
4. 函数重载
自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
一词多义
4.1 函数重载概念
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题编译器能区分才有价值
![img](https://img-blog.csdnimg.cn/img_convert/5b7a9c1140f4c8d2ec2148d174f0e1fc.png)
![img](https://img-blog.csdnimg.cn/img_convert/c2c31edaae4e8d8e9c50d21919d71429.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
编译器能区分才有价值
[外链图片转存中…(img-taZ00Ip2-1715598926129)]
[外链图片转存中…(img-ypfFTQT5-1715598926130)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新