1. C++关键字
C++关键字相对C语言来说要多一些,但是也是一种更完善更多优化的语言。
C++合计有63个关键词,C语言合计有32个关键字。
这里我们简单介绍一下C++的关键字
合计有这些,我们后期使用的时候在详细介绍。
2. 命名空间
命名空间是针对命名重复的一种解决方案,在C/C++中变量、函数和类都存在于全局作用域中,可能会导致很多冲突,使用命名空间的目的是针对于标识符的名称进行本地化,以避免命名冲突和名字污染,namespace关键字的出现就是针对这种问题。
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”
在C语言中,如果函数已经存在,再使用函数名称作为变量名这个时候我们的程序会报错,
但是C++这里的命名空间就利用了一个域的概念巧妙地化解了这个问题。如上图这里我们出现了报错后,我们这里使用一个namespace关键字来创建一个命名空间。
//这里xxy是我们命名空间的名字,大家可以使用自己喜欢的名字来命名
namespace xxy
{
// 命名空间中可以定义变量/函数/类型
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
struct Node* next;
int val;
};
}
这样我们这里就是把括起来的内容本地化在运行就不会出错啦!
这里我们空间命名空间也是可以嵌套的
namespace N1
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N2
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}
这里强调一下,在同一个工程中,多个命名空间的名字可以一样,在最后运行时,编译器会将他们合成同一个同名的空间,方便被调用。
命名空间的两种使用
一、关于命名空间的使用,我们需要介绍一个符号“::”这是两个冒号什么呢?这里我们叫他们作用域限定符,那么这两个“冒号”是什么意思呢?这里我们给大家解释一下:
int main()
{
printf("%d\n", N1::a);
return 0;
}
这个代码的意思及是将N1这个作用域中的a取出来打印在屏幕上,这样我们就不会跟全局变量的a又或者是别的作用域中的a搞混了。
二、接下来我们介绍的是使用using将命名空间中的某个成员引入
using N::b;
int main()
{
printf("%d\n", N::a);//第一个输出我们这里使用的是作用域限定符
printf("%d\n", b);//第二个我们就是使用using先把N1这个作用域中的b展开,就可以直接使用
return 0;
}
3. C++输入&输出
我们知道C语言中的输入和输出是scanf和printf,虽然在C++中我们也可以使用scanf和printf,但是呢我们C++也有一套属于自己的输入输出的东西哦。
#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;
return 0;
}
首先我们需要先在顶部include包含一个头文件叫做iostream(Input Output Strean)。
std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中。
在简单的说4点:
- 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std。 - cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
iostream >头文件中。 - <<是流插入运算符,>>是流提取运算符。
- 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
C++的输入输出可以自动识别变量类型。 - 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,
这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。
#include <iostream>
using namespace std;
int main()
{
int a;
double b;
char c;
// 可以自动识别变量的类型
cin>>a;
cin>>b>>c;
cout<<a<<endl;
cout<<b<<" "<<c<<endl;
return 0;
}
这里需要强调的是流提取运算符是可以自动识别变量类型的。
4.缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
void Func(int a = 0)
{
cout<<a<<endl;
}
int main()
{
Func(); // 没有传参时,使用参数的默认值
Func(10); // 传参时,使用指定的实参
return 0;
}
然后就是缺省参数的分类,缺省参数分为两类,全缺省参数,和半缺省参数。
全缺省参数:顾名思义就是函数定义的所有参数都有初始化,即使没有传参数也可以直接使用。
半缺省参数:规定缺省参数必须从右到左依次给出,不能隔着给。
注意: 1. 缺省参数不能在函数声明和定义中同时出现存在。
2.缺省值必须是常量或者全局变量。
还有就是C语言并不支持缺省参数的概念哦~
今天就到这里啦!谢谢观看!!