1·namespace
为什么要用命名空间?
1.避免名字冲突;2.划分逻辑单元
#include <iostream>
using namespace std;
namespace A1{
char* name = "A1";
void eat()
{
cout << name << " eat();" <<endl;
}
}
namespace A2{
char* name = "A2";
void eat()
{
cout << name << " eat();" <<endl;
}
}
//这里的A1与上面的A1是一起的~
//就相当于:上面的是你家餐厅,下面这个是你家卧室,但是都是属于A1(你家)的~
namespace A1{
void sleep()
{
cout << name << " sleep();" << endl;
}
}
int main()
{
// namespace
{
A1::eat(); //在你家餐厅吃饭
A2::eat(); //在好朋友家餐厅吃饭
A1::sleep(); //在你家卧室睡觉~
}
return 0;
}
A1::eat(); 就是在你家餐厅吃饭。
A2::eat(); 就是在你朋友家餐厅吃饭。
:: 是作用域限定符,相当于中文‘的’。
另外!命名空间可以嵌套!like this⬇️!
namespace A1
{
namespace A11
{
namespace A12
{
something();
}
}
}
namespace A = A1::A11::A12
//则:A1::A11::A12::something(); 就等价于 A::something();
using namespace A1;
//就相当于 ‘裸奔’ ,把A1中的东西暴露在当前作用域下
//using namespace std也是一样,把cout暴露在全局下
//风险:可能会出现命名冲突,一般还是带上::用比较好
2·struct
C++结构
声明或定义结构体变量,可以省略struct
内部可以定义函数
C++联合
声明或定义联合变量,可以省略union
支持匿名联合
(匿名联合,使变量按联合的方式在内存分布)
union{
char cc;
int ii;
};
ii = 65;
cout << cc << endl;
输出:A
C++枚举
可以省略enum
独立类型和整形不能隐式互相转换
enum Color {RED,BLUE,GREEN};
Color color = 1; //在C中这是正确的,但在C++中是错误的
Color color = BLUE;//C++中是这样,C++中的类型检查更加严格!
*/
struct:在C中struct里不能有函数,但是在C++中可以哈
// C
struct Student1
{
char name[32];
int age;
};
struct Student1 stu_c = {"hanoi",18};
// C++
struct Student2
{
char name[32];
int age;
void introduce()
{
cout << name << "," << age << endl;
}
};
Student2 stu_cpp = {"ahoj",19};
stu_cpp.introduce();
输出:
union:匿名联合举例
union
{
char c[4];
int i;
};
i = 0x12345678;
for(int i=0;i<4;++i)
{
cout << hex << (int)c[i] << ' ';
}
cout << endl;
输出:78 56 34 12
总结一下:
/*
cout中的c是指console
endl -> end line
作用域限定符 :: 相当于中文‘的’ , 表示作用域或所属关系
namespace: 相同名字的namespace作用域相同
namespace的作用:避免名字冲突、划分逻辑单元,名字空间中的声明和定义可以分开
名字空间可以嵌套,使用时候得一层一层的扒皮。
名字空间也可以赋值取别名,比如
namespace A1
{
namespace A11
{
namespace A12
{
something();
}
}
}
namespace A = A1::A11::A12
则:A1::A11::A12::something(); 就等价于 A::something();
using namespace A1;
就相当于 ‘裸奔’ ,把A1中的东西暴露在当前作用域下
using namespace std也是一样,把cout暴露在全局下
风险:可能会出现命名冲突,一般还是带上::
C++结构
声明或定义结构体变量,可以省略struct
内部可以定义函数
C++联合
声明或定义联合变量,可以省略union
支持匿名联合
(匿名联合,使变量按联合的方式在内存分布)
union{ char cc; int ii; }; ii = 65; cout << cc << endl;
输出:A
C++枚举
可以省略enum
独立类型和整形不能隐式互相转换
enum Color {RED,BLUE,GREEN}; Color color = 1; //在C中这是正确的,但在C++中是错误的 Color color = BLUE;//C++中是这样,C++中的类型检查更加严格!
*/