一、关键字的添加
C++是对C的“增强”,几乎引入了一倍的关键字。
C语言常用关键字
C++98关键字
二、命名空间
在写C语言程序时,当你写了一个函数把它命名为max,且此时包含头文件stdlib.h时你会发现编译会报错,这是C语言的缺陷之一,因为你命名的函数max与标准库里的函数max命名冲突,在C语言中这并不能被很好解决,于是C++引入了命名空间的概念用以解决此类问题,定义命名空间使用namespace关键字,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。可以认为命名空间影响了编译器查找的规则,编译器不会主动到命名空间里寻找内容,当要使用时从外部调用。
命名空间的定义
namespace m1 // m1为命名空间的名称,可以随意定义
{
// 命名空间中的内容,既可以定义变量,也可以定义函数
int c=10;
int d=20;
int Add(int a, int b)
{
return a + b;
}
}
//命名空间的嵌套使用
namespace m2
{
int c;
int Add(int a, int b)
{
return a + b;
}
namespace n
{
int c;
int Add(int a, int b)
{
return a + b;
}
}
}
值得注意的是同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
命名空间的使用
namespace m
{
int a = 10;
int b = 20;
int Add(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a -b;
}
}
int main()
{
printf("%d\n", a); // 该语句编译出错,无法识别a
return 0;
}
之前已经提到对于命名空间里的成员是编译器无法直接访问的,所以上面这段代码出错。如何使用命名空间?
1.加命名空间名称及作用域限定符
直接在成员名前加上作用域的名称和::符号
int main()
{
printf("%d\n", m1::c);
return 0;
}
2.使用using将命名空间中成员引入
using m1::d;
int main()
{
printf("%d\n", m1::c);
printf("%d\n", d);
return 0;
}
这里只将变量名d展开,而c并未展开所以还是需要加上作用域限定符。
3.使用using namespace 将命名空间名称引入
using namespce m1;
int main()
{
printf("%d\n", c);
printf("%d\n", d);
Add(1, 1);
return 0;
}
using namespace+命名空间名称将命名空间全部展开,相当于命名空间失效,命名空间内部成员全部暴露。我们思考一个问题,当在写C++程序时有时总会写上这样一段代码“using namespce std;”,这其实就是将C++的标准库的命名空间展开了,以方便调用库中成员。
三、C++的输入与输出
#include <iostream>
using namespace std;
int main()
{
int a;
double b;
cin >> a;
cin >> b;
cout << a <<" "<<b << endl;
return 0;
}
与C语言使用头文件类似,使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。C语言和C++在输入输出的效率上各有优劣,C++中在输入输出时不需要增加数据格式控制如“%d”、“%s”等,但是在输出一段带有格式的内容时,C语言的printf函数又会显得方便许多。
四、缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。缺省参数分为全缺省参数和半缺省参数。
全缺省参数,顾名思义就是函数所有参数都有一个缺省值
#include <iostream>
using namespace std;
void TestFunc(int a = 1, int b = 2, int c = 3)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
int main()
{
TestFunc();//打印结果数值为1,2,3
TestFunc(10);//打印结果数值为10,2,3
TestFunc(10,20);//打印结果数值为10,20,3
TestFunc(10,20,30);//打印结果数值为10,20,30
return 0;
}
void TestFunc(int a, int b = 2, int c = 3)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
这里有非常值得注意的几个语法规定,一是半缺省参数必须从右至左依次给出,不能间隔。二是缺省参数不能在函数声明和定义中同时出现。三是缺省值必须是常数或全局变量。