1.前言:
c++兼容C语言,C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。
因此你可以理解为c++是在c语言的基础上进行扩展的升级版.
它补充了C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的.
所以入门篇讲解的就是c++在c基础上优化后的一些地方,对c++的语法进行熟悉.
2关键字
C++总计63个关键字,C语言32个关键字
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 |
3.命名空间与输入输出
在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染.
例如:
我定义了一个全局变量,对这个变量进行输出,编译器会报错,这是因为名为:rand在头文件中也存在,这就造成了一个问题,命名冲突,但是在未来写项目写代码,命名是必不可少的,因此,c++引入了命名空间,有效的解决这个问题.
接下来我们对上面这段代码进行解读.
- 第一行的头文件是一个io流的头文件,为下面的的cout使用就需要包含这个头文件(c++头文件不包含.h的后缀)
- namespace是定义了一个空间,这个空间的里面的命名不会影响其他同名的变量,但是在使用的时候,就需要命名空间名字+::来调用.
- 有没有不需要命名空间名字+::来调用呢,可以会觉得这样太麻烦了.答案是有的,在代码的第7行,使用using namespace + 空间名 这个是展开命名空间,直接就可以使用变量名调用,慎用!比较危险,日常谢谢短代码没什么,写项目建议不要展开.
- 第10行,cout是流插入,你可以简单理解成C语言中的printf,cout默认把数据插入到终端上,<<你可以简单理解成是一个方向,把箭头这一边的数据,给另一边.这一行的意思就是吧右边的数据给到cout,cout把拿到的数据显示到屏幕上.endl是是一个特殊的输出流操作符,你可以简单理解为'\n'的换行符.
补充:调用变量名的时候,全局变量找不到的时候,是不会去命名空间里面找的,因此命名空间就像给里面的变量围了一堵墙,空间名+::变量名,好比就是钥匙.
命名空间内部不止可以存放变量,还可以存放类型,函数,甚至可以进行命名空间的嵌套.
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中!
这里可能还会涉及多个重名的命名空间,c++的处理是这样的:同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中.
下面是对上例的补充:
可以单独对某个空间的成员进行展开,更加灵活.
输入输出(上面谈及过一些):
说明:
- 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
- cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。
- <<是流插入运算符,>>是流提取运算符。
- 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
- C++的输入输出可以自动识别变量类型。
- 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,
- 注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式。
std命名空间的使用惯例: std是C++标准库的命名空间,如何展开std使用更合理呢? |
- 在日常练习中,建议直接using namespace std即可,这样就很方便。
- using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +using std::cout展开常用的库对象/类型等方式
如上代码所示,cin是流提取,从键盘上获取的数据,存放到两个变量中,然后再将新的变量值输出.
4.缺省参数
概念:
声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
void Func(int a = 0)
{
cout<<a<<endl;
}
int main()
{
Func(); // 没有传参时,使用参数的默认值
Func(10); // 传参时,使用指定的实参
return 0;
}
分类:
- 全缺省参数:
void Func(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
- 半缺省参数:
void Func(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
注意:
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现
//a.h
void Func(int a = 10);
// a.cpp
void Func(int a = 20)
{}
// 如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该
用那个缺省值。
3. 缺省值必须是常量或者全局变量
4. C语言不支持(编译器不支持)
以上就是本章的所有的内容啦,又开了个新的篇章,在以后的时间里我也会积极的分享更好的博客给大家,把学习到的内容都写出来,感谢观看!