一、C++文件和流:
在C++中進行文件處理,需要包含頭文件<iostream>和<fstream>。fstream標準庫定義的三個新的數據類型:
數據類型 | 描述 |
ofstream | 該數據類型表示輸出文件流,用于創建文件并向文件寫入信息。 |
ifstream | 該數據類型表示輸入文件流,用于從文件讀取信息。 |
fstream | 該數據類型通常表示文件流,且同時具有 ofstream 和 ifstream 兩種功能,這意味著它可以創建文件,向文件寫入信息,從文件讀取信息。 |
打開文件:
void open(const char *filename, ios::openmode mode);
???關閉文件:
Void close();
文件被打開的模式:
模式標志 | 描述 |
ios::app | 追加模式。所有寫入都追加到文件末尾。 |
ios::ate | 文件打開后定位到文件末尾。 |
ios::in | 打開文件用于讀取。 |
ios::out | 打開文件用于寫入。 |
ios::trunc | 如果該文件已經存在,其內容將在打開文件之前被截斷,即把文件長度設為 0。 |
示例:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
ifstream ?afile;
afile.open("file.dat", ios::out | ios::in );
二、C++異常處理:
異常是程序在執行期間產生的問題。C++ 異常是指在程序運行時發生的特殊情況。異常提供了一種轉移程序控制權的方式。
C++ 異常處理涉及到三個關鍵字:try、catch、throw。
throw:?當問題出現時,程序會拋出一個異常。這是通過使用?throw?關鍵字來完成的。
catch:?在您想要處理問題的地方,通過異常處理程序捕獲異常。catch?關鍵字用于捕獲異常。
try:?try?塊中的代碼標識將被激活的特定異常。它后面通常跟著一個或多個 catch 塊。
try {
// 保護代碼
}catch( ExceptionName e1 ) {
// catch 塊
}catch( ExceptionName e2 ) {
// catch 塊
}catch( ExceptionName eN ) {
// catch 塊
}
三、C++動態內存:
C++程序中的內存分為兩個部分:1、棧—在函數內部聲明的所有變量都將占用棧內存;2、堆—程序中未使用的內存,在程序運行是可用于動態分配的內存。
使用new運算符為給定類型的變量在運行時分配堆內的內存,當不再需要動態分配的內存空間,使用delete運算符,來刪除由new運算符分配的內存。示例:
double* pvalue = NULL; // 初始化為 null 的指針
pvalue = new double; // 為變量請求內存
double* pvalue = NULL;
if( !(pvalue = new double )) {
cout << "Error: out of memory." <<endl;
exit(1);
}
delete pvalue; ???????// 釋放 pvalue 所指向的內存
四、C++命名空間:
命名空間的定義使用關鍵字?namespace,后跟命名空間的名稱:
namespace namespace_name {
// 代碼聲明
}
調用帶有命名空間的函數或變量,需要在前面加上命名空間的名稱:
name::code; // code 可以是變量或函數
使用using namespace指令,在使用命名空間時,可以不用再前面加上命名空間的名稱。
命名空間的嵌套:通過使用?::?運算符來訪問嵌套的命名空間中的成員
namespace namespace_name1 {
// 代碼聲明
namespace namespace_name2 {
// 代碼聲明
}
}
五、C++模板:
模板式泛型編程的基礎,泛型編程即以一種獨立于任何特定類型的方式編寫代碼。
函數模板:
template <typename type> ret-type func-name(parameter list) {
// 函數的主體
}
類模板:
template <class type> class class-name {
...
}
六、C++預處理器:
◆?#define預處理:用于創建符號常量,該符號常量稱為宏。
#define macro-name replacement-text
可以使用 #define 來定義一個帶有參數的宏:
#define MIN(a,b) (a<b ? a : b)
◆?條件編譯:有幾個指令可以用來有選擇地對部分程序代碼進行編譯。
#ifdef NULL
?? #define NULL 0
#endif
#ifdef DEBUG
??? cerr <<"Variable x = " << x << endl;
#endif
#if 0
??? 不進行編譯的代碼
#endif
C++中的預定義宏:
宏 | 描述 |
__LINE__ | 這會在程序編譯時包含當前行號。 |
__FILE__ | 這會在程序編譯時包含當前文件名。 |
__DATE__ | 這會包含一個形式為 month/day/year 的字符串,它表示把源文件轉換為目標代碼的日期。 |
__TIME__ | 這會包含一個形式為 hour:minute:second 的字符串,它表示程序被編譯的時間。 |