- 内存分配和释放:C++采用new和delete,C语言采用malloc和free
- C++iostream库包含了istream和ostreamn来表示输入输出流,一个流就是一个字符序列(字符序列是由一系列字符组成的有序集合。字符可以是字母、数字、标点符号或其他特殊字符。字符序列通常是以字符串的形式表示)代替了C语言中的stdio标准输入输出库
- C++中的字符串类代替了C语言中的字符数组处理函数(C语言中没有字符串)
- C++中的try/catch/throw异常处理机制代替了C中setjmp()和longjump()函数
- C++可以重载(形参类型或则形参个数不相同),C语言不可以
- C++可以在使用这个变量的之前的任何地方定义这个变量,C语言只能在函数开头定义这个变量
- C++增添了引用这个类型
- C++增添了命名空间,C语言没有
命名空间是为了防止名称冲突,命名空间的使用规则如下
- 命名空间只能定义在全局范围内
- 命名空间可以嵌套
- 命名空间可以随时将新成员加入已有的空间
1 namespace A {
2 int a = 100;
3 int b = 200;
4 }
5 //将c添加到已有的命名空间A中
6 namespace A {
7 int c = 300;
8 }
9 void test04()
10 {
11 cout<<"A中a = "<<A::a<<endl;//100
12 cout<<"A中c = "<<A::c<<endl;//200
13 }
4.命名空间可以存放变量和函数
1 namespace A {
2 int a=100;//变量
3
4 void func()//函数
5 {
6 cout<<"func遍历a = "<<a<<endl;
7 }
8 }
9 void test05()
10 {
11 //变量的使用
12 cout<<"A中的a = "<<A::a<<endl;
13
14 //函数的使用
15 A::func();
16 }
5.命名空间中的函数可以在命名空间之外定义
1 namespace A {
2 int a=100;//变量
3
4 void func();
5 }
6
7 void A::func()//成员函数 在外部定义的时候 记得加作用域
8 {
9 //访问命名空间的数据不用加作用域
10 cout<<"func遍历a = "<<a<<endl;
11 }
12
13 void funb()//普通函数
14 {
15 cout<<"funb遍历a = "<<A::a<<endl;
16 }
17 void test06()
18 {
19 A::func();
20 funb();
21 }
6.无名的命名空间,相当于在函数前加了标识符static表示作用域在本文件内,只能在本文件中访问
7.命名空间可以取个别名(可以用using记忆)
1 namespace veryLongName{
2
3 int a = 10;
4 void func(){ cout << "hello namespace" << endl; }
5
6 }
7
8 void test(){
9 namespace shortName = veryLongName;
10 cout << "veryLongName::a : " << shortName::a << endl;
11 veryLongName::func();
12 shortName::func();
13 }