C++学习 18-11-19

1.C++语言中的头文件

与C语言不同,C++中的系统标准头文件不是 .h 结尾的,而是类似于 iostream 等,而且其中包含 stdio.hstdlib.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窗口中运行的命令,可以换成其他的命令,如 dirshutdownpingipconfig等等。

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++中使用关键字 newdelete 即可进行动态分配内存与释放。

与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。

猜你喜欢

转载自blog.csdn.net/weixin_42896619/article/details/84304542
今日推荐