一、C++介绍:
1、C++兼容C语言:
cstdio --> stdio.h
cstdlib --> stdlib.h
cstring --> string.h
2、编译器: g++
3、扩展名:.cpp/.cc/.C/.cxx
4、头文件:#include<iostream> 在目录:usr/include/c++目录中
5、流程操作:cout<</cin>> 也可以用printf / scanf
cin:标准输入 cout:标准输出 cerr:标准错误 clog:标准日志
6、所有标准库类型、对象和函数都位于std名字空间中
二、命名空间
划分更多的逻辑空间(逻辑单元,作用域),可以有效避免名字冲突
1、命名空间案例
namespace 命名空间名称 { ... }
namespace ICBC {
int g_money = 0;
void save (int money) {
g_money += money;
}
}
namespace CCB {
int g_money = 0;
void save int money )
g_money += money;
}
void pay ( int money ) {
g_money -= money;
}
}
2、命名空间的合并
namespace ICBC { // 编译器将合并为一个
void pay ( int money ) {
g_money -= money;
}
}
int main ( void ) {
ICBC::save (10000)
ICBC::pay (3000);
};
3、声明定义分开
namespace CCB {
int g_money = 0;
void save (int money){
g_money += money;
}
void pay( int money );// 声明
}
void CCB::pay ( int money ) { //定义
g_money -= money;
}
4、作用域限定符 ::
namespace ns {
int g_value = 0;
}
int main ( void ) {
ns::g_ value = 100;
std::cout << "ns::g_value=" << ns::g_value << std::endl;
return 0 ;
}
5、名字空间指令
namespace ns {
int g_value = 0;
}
int main ( void ) {
int g_value = 0;
using namespace ns;//从这行代码开始,ns中的内容在当前作用域 可见
g_value = 100;
std:: cout << "ns::g_value=" << ns::g_value < std:: endl;
return 0;
}
在main函数作用域中 g_value访问的是本作用域内的
namespace ns {
int g_value = 0;
}
int g_value = 0;
int main ( void ) {
using namespace ns;//从这行代码开始,ns中的内容在当前作用域 可见
g_value = 100;
std:: cout << "ns::g_value=" << ns::g_value < std:: endl;
return 0;
}
//报错 对于main函数,g_value都是外部的,不知道访问哪个
namespace ns {
int g_value = 0;
}
int g_value = 0;
using namespace ns;//从这行代码开始,ns中的内容在当前作用域 可见
int main ( void ) {
g_value = 100; // 5 / 8 / err
std:: cout << "ns::g_value=" << ns::g_value < std:: endl;
return 0;
}
这个也是报错了,两个都是全局变量冲突了
6、名字空间声明
using namespace std;
namespace ns {
int g_value = 0;
}
int main ( void ) {
int g_value = 0;
using ns::g_value; //从这行代码开始,ns中的g_value引入当前作用于(相当于定义)
g_value = 100;
cout << "ns::g_value=" << g_value << endl;
return 0;
}
重定义报错
using namespace std;
namespace ns {
int g_value = 0;
}
int g_value = 0;
int main ( void ) {
using ns::g_value; //从这行代码开始,ns中的g_value引入当前作用于(相当于定义)
g_value = 100;
//访问的是ns中的g_value
cout << "ns::g_value=" << g_value << endl;
return 0;
}
不报错
7、名字空间的嵌套
* 内层标识符与外层同名标识符为隐藏关系
* 嵌套的名字空间需要逐层分解
namespace nsl {
int g_value = 100;
namespace ns2 {
int g_value = 200;
namespace ns3 {
int g value = 300;
namespace ns4 {
int g value = 400;
}
}
}
}
8、名字空间别名
* 可通过名字空间别名简化书写
int main ( void ) {
namespace ns_four = ns1::ns2::ns3::ns4;
cout << ns_four:: g_value << endl;
return 0;
}
1866

被折叠的 条评论
为什么被折叠?



