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;
}
从终端中我们可以看到:缺省参数只有在不传入该参数值时才使用缺省参数。、,当实参存在时优先使用实参!