1.关键字
区别于C语言的关键词,c++在其基础上进行了增加扩展,共计63个关键字,而C语言只有32个,同时c++兼容C语言的关键字,具体如下:
asm | do | if | return | try | continue |
---|---|---|---|---|---|
auto | double | inline | short | typedef | for |
bool | dynamic_cast | int | signed | typeid | public |
break | else | long | sizeof | typename | throw |
case | enum | mutable | static | union | wchar_t |
catch | explicit | namespace | static_cast | unsigned | default |
char | export | new struct | using | friend | |
class | extern | operator | switch | virtual | register |
const | false | private | template | void | true |
const_cast | float | protected | this | volatile | while |
delete | goto | reinterpret_cast |
2.命名空间
在C/C++的程序编写时,我们通常会定义大量的变量以及函数,每个变量都有其相对应的作用域,但是当我们在实际的编程过程中会发现一个非常大的局限性,就是在同一作用域下不能定义相同名字的变量或者是函数,同时在需要使用别人的代码的情况下,其中的变量名极大可能会与自己代码中的变量名产生重定义,倘若按照传统方法进行修改极不方便,因此为了解决这种问题,在c++中,增加了命名空间的功能。
命名空间,其出现的目的在于对标识符的名称进行本地化,以避免命名冲突或名字污染。
2.1 命名空间的定义
命名空间就像是各个国家划分边界线一样,使用namespace关键字,后面更上该空间的名字(国家的名字),之后用 { } 框住定义的区域即可(边界线);命名空间可以嵌套(类比一个国家下有不同的省份区域),从而实现不同作用域的管理;同时在一个工程下允许存在多个相同名称的命名空间,但在这些空间中不允许重定义,编译器最后会合在同一个命名空间中(类比一个国家的疆土,可以不连续,但是只要是这个国家的地方就一定只有一个领导人,不允许自立为王)。所有成员只在其对应的空间中起作用。
例1. 一般的命名空间
#include<iostream>
using namespace std;
namespace first
{
int part1;
void _P()
{
cout << "this is the first namespace" << endl;
}
}
例2. 嵌套的命名空间
#include<iostream>
using namespace std;
namespace first
{
int part1;
void _P()
{
cout << "this is the first namespace" << endl;
}
namespace first_1//在使用时,仅仅使用using namespace first访问不到,应当使用using namespace first::first_1;
{
int part2;
void _P()//在该命名空间中可以使用与外部空间相同的变量名以及函数名不会产生冲突
{
cout << "this is the first_1 in first" << endl;
}
}
}
2.2 命名空间的使用
命名空间的值不能直接调用,届时相当于闭关锁国的状态,井水不犯河水,如果需要使用命名空间中的成员,需要使用特定的语句建立联系(搭建丝绸之路,建立贸易往来)。
* 方式一、加命名空间名称及作用域限定符
space_name::member_name
#include<iostream>
using namespace std;
namespace first
{
int a=100;
}
int main()
{
cout << first::a << endl;//使用限定符的形式直接将成员拎出来使用
return 0;
}
* 方式二、使用using将命名空间中成员引入
using space_name::member_name
using first::a;
int main()
{
cout << a<< endl;//可以直接在程序中使用该成员
return 0;
}
* 方式三、使用using展开命名空间,引入所有成员
using space_name;
using first;//引入全部的成员,成员暴露在全局中,容易与全局变量产生冲突
int main()
{
cout << a<< endl;//可以直接在程序中使用该成员,但是容易产生冲突,视情况使用
return 0;
}
输入/输出
在c++中兼容C语言中的scanf/printf作为输入/输出的标志命令,但是实际上其中有自己的标准输入/输出的命令,即cin/cout,更加接近数据流的形式。
要点一.
使用cout标准输出与cin标准输入时,必须包含头文件以及std标准命名空间,在这里c++头文件定义的所有成员都属于std命名空间。
要点二.
c++中的头函数没有 .h 后缀
要点三.
使用c++输入输出更加的方便,不需要增加数据格式的控制,如 %d 、 %c …
要点四.
支持连续的输出与输入,输入输出的顺序均为从左往右
例3.
阅读以下代码以及其运行截图,验证以上要点。
#include<iostream>
using namespace std;
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
cout << "a="<< a << endl;
cout << "b="<< b << endl;
cout << "c="<< c << endl;
cout << "d="<< d << endl;
cout << a << b << c << d << endl;
return 0;
}//在键盘键入时,应当是从左往右依次赋值,运行结果如图所示
缺省参数
还记得C语言中的函数吗,当函数中需要传递参数时,如若参数传递数量不够会怎么样?是不是在编译的过程中会进行报错,而c++对于这种情况定义了一种特殊的语法,设定缺省参数。
缺省参数是声明定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
具体形式如下: 返回值类型+函数名(形参名称=val)
void testcode(int a = 10)
{
cout << a << endl;
}
int main()
{
testcode();
return 0;
}
可以发现依然可以调用参数,且使用其设定的默认值。
缺省参数的分类
全缺省参数
将函数所要传递的所有参数均设置出默认值。
void Test(int a = 1, int b = 1, int c = 1)
{
cout<< "a = "<< a <<endl;
cout<< "b = "<< b <<endl;
cout<< "c = "<< c <<endl;
}
int main()
{
Test();
return 0;
}
半缺省参数
部分使用的参数进行默认设置
void Test(int a = 1, int b = 1, int c = 1)
{
cout<< "a = "<< a <<endl;
cout<< "b = "<< b <<endl;
cout<< "c = "<< c <<endl;
}
int main()
{
Test();
return 0;
}
【注意】:
- 半缺省参数必须从右往左依次来给出,不能间隔着给
- 缺省参数不能在函数声明和定义中同时出现
- 缺省值必须是常量或者全局变量
- C语言不支持(编译器不支持)