C C++最全C++入门·开篇_c++开头(1),2024年最新致C C++开发者

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

printf("%d\n", rand);
return 0;

}


上面的代码是没有问题的,但是加上这个头文件之后程序就挂了。



#include<stdio.h>
#include<stdlib.h>

int rand = 0;

int main()
{
printf(“%d\n”, rand);
return 0;
}


![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ws5dZTJv-1652085076490)(C:\Users\macbook\AppData\Roaming\Typora\typora-user-images\image-20220430205402762.png)]](https://img-blog.csdnimg.cn/a528458ca3e64e1bb0eecf0c50c2684c.png)


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
using std::cout;
using std::endl;

int main()
{
cout << “Hello World!” << endl;
return 0;
}


说明:


* 使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含头文件以及std标准命名空间;注意:早期的标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,后来将其实现在std命名空间下,为了和c头文件区分也为了正确使用命名空间,规定C++头文件不带.h
* 使用C++输入输出更方便,不需要增加数据格式控制,如%d, %c等




---


## 四、缺省参数/默认参数


缺省参数可以形象的比作我们生活中的备胎,嗯呢,C++中函数的参数是可以配备胎的,但是注意哦,C语言不支持缺省参数。


### 1.缺省参数的定义


缺省参数是声明或定义函数时为函数的参数指定一个默认值。


在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。



void TestFunc(int a = 0)
{
cout << a << endl;
}

int main()
{
TestFunc();//没有传参时,使用参数的默认值
TestFunc(10);//传参时,使用指定的实参
return 0;
}


### 2.缺省参数分类


#### I.全缺省参数


全缺省参数指的是全部给了缺省参数/默认参数



void TestFunc(int a = 10, int b = 20, int c = 30)
{
cout << "a = " << a << endl;
cout << "c = " << c << endl;
}


#### II.半缺省参数


半缺省参数指的是部分缺省,注意:半缺省必须是从右往左依次来给出,不能隔着给


比如下面的代码是正确的:



void TestFunc(int a, int b = 10, int c = 20)
{

}


如果是这样给出,是错误的



void TestFunc(int a = 10, int b, int c = 20)
{

}

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


}

[外链图片转存中…(img-MZm6ACRF-1715682523247)]
[外链图片转存中…(img-TMTCT0Vd-1715682523247)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值