C++你不得不知道的(1)

C++你不得不知道的(1)

【1】引例:

1、C语言在使用的过程中存在冲突问题! 解决办法:使用域将想要使用的变量包括进去。

#include<stdio.h>
int rand=10;
int main()
{
	printf("%d\n",rand);
	return 0;
}

此时,我们是可以正常运行的!

但是,当包含头文件stdlib.h时,VS上就会报错。(见下图)

在这里插入图片描述

这时,我们就要进入到C++提供的域(屏蔽作用),来隔离头文件"stdlib.h"引起的报错。

【2】命名空间namespace的价值

(1)在C/C++中,变量、函数和类都是大量存在的。如果全都存在于全局域中,就会出现许多冲突。

(2)namespace的作用:对标识符的名称进行本地化,以避免命名冲突或名字污染。

【3】namespace的定义:

(1)定义命名空间,需要用到namespace关键字,后面接命名空间名字,在用{}包含起来即可。例如:

#include<stdio.h>
#include<stdlib.h>
namespace Leader
{
	int rand = 10;
}

int main()
{
	printf("%d\n",Leader::rand);
	return 0;
}

这样,我们使用rand的时候,就不必被头文件"stdlib.h"所影响了!

(2)使用方法:

① ::变量名,这种使用访问的是全局变量。

② 命名空间::变量名,这种使用方法访问的是命名空间内部的变量。

③ 变量名,这种使用方法访问的是局部变量。

④ namespace的使用可以进行嵌套!即如下例子:

#include<stdio.h>

namespace Leader
{
	namespace Leader_1
	{
		int data=10;
		char arr[10];
	}
	
	namespace Leader_2
	{
		int data=15;
		char arr[15];
	}
}

int main()
{
    printf("%d\n",Leader::Leader_1::data);
    printf("%d\n",Leader::Leader_2::ata);
	return 0;
}

在这里插入图片描述

我们可以注意到:使用namespace的功能就是将各自的变量隔离起来(域),解决名字冲突的问题。

注意:在使用namespace包含结构体时,使用时有点特殊,详情如下:

#include<stdio.h>
namespace Leader
{
	struct node
	{
		int data;
		struct node* next;
	};
}
int main()
{
	printf("%d\n",struct Leader::node.data);
	return 0;
}

这里我们注意到:在使用namespace包含结构体,使用时“ :: ”符号需要在struct关键字之后!!!

【4】namespace的使用:

(1)指定命名空间访问(项目中推荐) 例如:

#include<iostream>
int main()
{
    std::cout<<"hello!"<<std::endl;
}

(2)using将命名空间包含(冲突风险大,项目中不推荐,但日常使用可以)

#include<iostream>
using namespace std;
int main()
{
    cout<<"hello!"<<endl;
}

(3)using包含命名空间的某个成员(项目中经常访问的不存在冲突的成员的时候推荐)

#include<iostream>
using std::cout;
int main()
{
    cout<<"hello!"<<std::endl;
}

【5】C++输入/输出

(1)是Input Output Stream 的缩写,是标准输入流、输出流。

(2)std::cin是istream类的对象,它主要面对窄字符的标准输入流。

(3)<<是流插入运算符,>>是流提取运算符。

【6】缺省参数

(1)缺省参数定义:声明或定义函数时为函数的参数指定一个缺省值。在调用函数时,如果没有参数,就使用此参数值,否则就使用指定的实参。例子如下:

#include<iostream>
using std::cout;
using std::endl;
int Add(int x=10,int y=20)
{
	int c = x + y;
	return c;
}
int main()
{
	cout<<Add()<<endl;
	cout<<Add(1,2)<<endl;
	cout<<Add(1)<<endl;
}

在这里插入图片描述

从终端中我们可以看到:缺省参数只有在不传入该参数值时才使用缺省参数。、,当实参存在时优先使用实参!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值