1、命名空间
1、命名空间的定义
namespace 命名空间名称
{
各个成员
}
2、命名空间的使用
(1)命名空间的名字+域解析符(::)
例如:
Name A :: 命名空间中的成员;
(2)用using打开要使用的命名空间
例如:
using namespace NameA ;
(2)用using打开要使用的命名空间的部分成员
using NameA :: g_a;
(3)怎么使用命名空间与默认命名空间都有的变量,怎么使用默认命名空间中的变量
直接使用::
(4)
注意://using只在当前作用域有效
#include <stdio.h>
namespace NameA
{
int g_a;
int add(int a,int b)
{
return a+b;
}
}
namespace NameB
{
int g_a;
int g_b;
int mux(int a,int b)
{
return a-b;
}
}
int g_b;
//使用命名空间名字加上域解析符::使用
int main1()
{
NameA :: g_a = 10;
printf("1+2 = %d\n",NameA :: add(1,2));
printf("3-2 = %d\n",NameB :: mux(3,2));
printf("NameA g_a = %d\n",NameA :: g_a);
printf("NameB g_a = %d\n",NameB :: g_a);
return 0;
}
//用using打开要使用的命名空间
int main2()
{
using namespace NameA;
g_a = 10;
printf("1+2 = %d\n",add(1,2));
printf("3-2 = %d\n",NameB :: mux(3,2));
printf("NameA g_a = %d\n",NameA :: g_a);
printf("NameB g_a = %d\n",NameB :: g_a);
return 0;
}
//用using打开要使用的命名空间中的部分成员
int main3()
{
using NameA :: g_a;
g_a = 10;
printf("1+2 = %d\n",NameA :: add(1,2));
printf("3-2 = %d\n",NameB :: mux(3,2));
printf("NameA g_a = %d\n",NameA :: g_a);
printf("NameB g_a = %d\n",NameB :: g_a);
return 0;
}
//命名空间与默认命名空间都有的变量,怎么使用默认命名空间中的变量
int main()
{
using NameB :: g_b;
::g_b = 10;
printf("3-2 = %d\n",NameB :: mux(3,2));
printf("g_b = %d\n",::g_b);
printf("NameB g_b = %d\n",NameB :: g_b);
return 0;
}
//using只在当前作用域有效
2、头文件
1、早起头文件
无引用命名空间,c++和c的头文件一样,类似 xxx.h
2、引用命名空间后
为了与之前的软件兼容,因此保留了大部分从前的头文件,同时,对之前所有的库进行重写,将所有的内容纳入到统一的命名空间(std)下。
3、为了与无命名空间的头文件区分:
有命名空间的头文件
(1)C,头文件后缀.h去除,在前面加上c stdio.h----->cstdio
(2)c++,直接头文件后缀.h去除,iostream.h------>iostream
#include <iostream>
int main()
{
//c++允许在for循环中定义变量,且变量只在当前循环中有效
for(int i=0;i < 10; i++)
{
printf("i = %d\n",i);
}
return 0;
}
3、标准输入输出
1、标准输出:cout
cout << a << endl;
与printf 的区别:
printf是函数,cout 是一个变量
<< 左移操作符和cout 结合后功能发生了改变,可以理解为数据流向
数据从右边流向左边。
左边是:屏幕,右边是数值。
endl是一个换行,在c++中对于c的的转义符也能使用
Cout 支持链式操作,遵循先来后到的规则
cout 的优点:可以自动识别基础变量类型,缺点:效率大约比printf低20倍
2、标准输入:cin
cin >> a;
数据流向,从左往右。
键盘输入值保存到变量中。
cin 支持链式操作,遵循先来后到的规则,和C一样,用换行和空格区分
3、注意:
cin 和 cout 必须写在每行的起始位置。
不能写成 a >> cout和 a << cin
#include <iostream>
using namespace std;
//标准输出
int main1()
{
int a = 10;
double b = 2.15;
char c = 'p';
float d = 3.14f;
char str[20] = "a good boy!";
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
cout << "str = " << str << endl;
return 0;
}
using namespace std;
//标准输入
int main()
{
int a;
double b;
char c;
float d;
char str[20];
cout << "请输入a,b,c,d,str对应数值: ";
cin >> a >> b >> c >> d >> str;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
cout << "str = " << str << endl;
return 0;
}
4、BOOL,寄存器变量,三目运算符
BOOL :只有2个值,true(1),false(0)
真是1,假是0。
非0 为真,0为假。
寄存器变量
register,
寄存器没有地址,在c中不能对寄存器变量取地址,在c++中可以取地址,但变量就不是寄存器变量了
三目运算符:
在c中三目运算符返回的是值,因此不能作为左值
在c++中三目运算符返回的是空间,可以作为左值使用,但如果比较结果是一个常量就不能使用。
1、怎么在c中实现c++中的效果
*(a>b?&a:&b) = 100;
#include <iostream>
using namespace std;
int main()
{
int a =10;
int b =30;
int c = a>b?a:b;
cout << c << endl;
a>b?a:b = 100;
cout << b << endl;
return 0;
}