1.C++语言中的头文件
与C语言不同,C++中的系统标准头文件不是 .h 结尾的,而是类似于 iostream 等,而且其中包含 stdio.h、stdlib.h 等所含的函数及关键字。
C++的代码是以 .cpp 为后缀名的,cpp代表 C PLUS PLUS,意即 C++。
2.C++中的界面项目
C语言中有Win32项目,表示C语言中的带图形界面,类似的,C++中也有其专有的带图形界面的项目,即 MFC 。
3.命名空间
在C++程序中,标准输入输出(标准I/O)是被包含在一个 命名空间 中的,当只调用头文件而没有打开命名空间时,某些函数是无法使用的。
打开命名空间的方法是:
using namespace 空间名;
例:
using namespace std;
4.使用C++中的标准I/O
标准I/O即为 对系统指定的标准设备的输入和输出,即从键盘输入数据,输出到显示器屏幕。
C语言中有 scanf函数、 getchar() 函数、printf() 等等。
C++中的输入输出引入了 流 的概念,一般使用 cout进行输出, cin 进行输入操作。
endl 的意思是 换行并清空缓冲区。
cout与cin包含于 std 命名空间,因此在使用时需要打开命名空间,或者使用作用域运算符 ::。
#include<iostream>
using namespace std;
int main()
{
int num;
char str;
cin >> num >> str;
cout << "数字:" << num << "字符串:" << str << endl;
system("pause");
return 0;
}
注意:末尾处的 system(“pause”) 的作用是在cmd窗口上显示 请按任意键结束…,这样的话可以使用 VS 中的 启动调试 而不用 开始执行(不调试)
另:system中双引号中的东西是可以在cmd窗口中运行的命令,可以换成其他的命令,如 dir、 shutdown 、ping 、ipconfig等等。
5.作用域运算符
作用域运算符的作用可以通过下面一组例子进行说明:
#include<iostream>
using namespace std;
int a = 1;
int main()
{
int a = 10;
cout << a << "\n";
cout << ::a << "\n";
system("pause");
return 0;
}
该程序运行的结果是:10 、1。
原因在于定义了一个与全局变量同名的局部变量,但是由于局部变量距离cout函数更近(近距离原则),因此直接输出 a 会输出局部变量a,而不是全局变量a;若要想输出全局变量a,则需要定义a的作用域,即a存在的域,此时, 作用域运算符就起到了作用。想要调用全局变量a只需在a前加上 ::,意即全局作用域,而不加则表示局部变量。
6.定义自己的命名空间
定义方法:namespace 空间名;
调用方法:using namespace 空间名;
namespace SLAM
{
int frame_id;
char frame_name;
}
using namespace SLAM;
SLAM::frame_id
SLAM::frame_name
为什么要使用命名空间呢?反正只要多声明几个变量就可以区分开每个变量的功能了啊?
原因是:为了程序的 复用和扩展 性,复用表示可以进行多次使用该程序,扩展表示当意图加入新的功能时,对程序不需进行任何除新添加功能以外的修改。
当我们分别定义移动机器人A和移动机器人B年龄、大小、使用年限等属性的时候,若直接使用变量定义这三个属性,需要6个变量来记录,如A_age、A_size、A_used_year、B_age、B_size、B_used_year,而是用命名空间的话,则只需定义各自的属性。
namespace RobotA
{
int age = 1;
int size = 50;
int used_year = 100;
}
namespace RobotB
{
int age = 10;
int size = 20;
int used_year = 50;
}
using namespace RobotA;
// using namespace RobotB;
int main()
{
cout << "Age:" << age << "\tSize:" << size << "\tUsed Year:" << used_year << endl;
system("pause");
return 0;
}
当我们想使用RobotA时打开A的命名空间而关闭B的命名空间,当我们想使用RobotB时打开B的命名空间而关闭B的命名空间即可。
7.动态分配内存与释放
在C++中使用关键字 new、delete 即可进行动态分配内存与释放。
与C语言相同的是,在C++中,new申请的空间也是在 堆区 的,因此需要进行手动释放。
例1.
int i = new int;
下面手动申请:
1.) 二维数组
2.) 指针
3.) 指针数组
4.) 结构体
// 二维数组
int *p1[3] = new int[3];
delete [] p1;
p1 = 0; // 在C++中,NULL 被定义为 0
// 指针
int* (*p2) = new int*;
delete p2;
p2 = 0;
// 指针数组
int* *p3 = new int*[3];
delete p3;
p3 = 0;
// 结构体
struct NODE
{
int id;
char *name;
char *tel_num;
};
struct NODE *p4 = new NODE;
delete p4;
p4 = 0;
8.零碎小知识
在C++中,()可以被用来进行赋值。
int *arr = new int(3); // 意味着arr被初始化为3。