C++學習 18-11-19
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
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。