首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 入門核心筆記:從基礎語法到 STL 容器與 MFC 應用

     編輯:關於C++

1. 基礎輸入輸出

  • operator<<:輸出運算子,cout 為標準輸出串流
  • operator>>:輸入運算子,cin 為標準輸入串流
  • 輸出表達式結果可串聯:cout << "val=" << val << endl;
  • getline(cin, str):讀取整行含空白字串

2. 迭代器概念

迭代器是遍歷 STL 容器元素的廣義指標,提供統一介面:

  • 基本操作:*、++、==、!=、=
  • 分類:輸入/輸出/前向/雙向/隨機存取迭代器
  • 各容器自行定義專屬迭代器型別(嵌套型別),支援泛型演算法
  • C# yield return 實作迭代器區塊,編譯器自動生成 IEnumerable

3. 列舉

enum Weekday { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; // 0~6
enum Num { x1, x2=0, x3=50, x4 }; // x1=0, x2=0, x3=50, x4=51
  • 列舉值為常數,不可修改
  • 列舉變數只能指定列舉常數,不可直接指定整數(需強制轉型)
  • 可用於 switch、陣列索引等場合

4. typedef 型別別名

typedef int* IntPtr;
typedef std::map MapIntStr;

用途:簡化複雜宣告、提升可讀性、跨平台型別抽象。

5. 物件大小與記憶體佈局

  • sizeof 以 char 大小為單位(sizeof(char)==1)
  • 常見型別大小:bool/char=1、short/wchar_t=2、int/long/float=4、double/long double=8
  • 空類別大小為 1(確保不同物件位址唯一)

6. 顯式型別轉換

運算子用途特性
reinterpret_cast位元模式重新解讀指標轉指標,無二進制轉換,極度危險
static_cast相關型別轉換編譯期檢查,基底/衍生類指標轉換、基本型別轉換
dynamic_cast執行期多型轉換需 RTTI,轉換失敗回傳 nullptr 或拋出 bad_cast
const_cast移除 const/volatile僅限指標/參考,修改原為常數之物件行為未定義

7. 類別設計核心

存取控制

  • private:預設,僅類別內部可存取
  • public:介面,外部可存取
  • protected:繼承用,衍生類可存取

特殊成員函數

  • 建構子:同名、無回傳型別、可多載、可 explicit 防隱式轉換
  • 解構子:~ClassName()、不可多載、虛解構子用於多型刪除
  • 拷貝/移動建構子與指派運算子:資源管理關鍵

8. 多型機制

  • 靜態多型:函數多載、運算子多載、模板(編譯期綁定)
  • 動態多型:虛函數覆寫(執行期綁定,虛函數表機制)
  • 抽象類別:含純虛函數(=0),不可實例化

9. 參數傳遞

  • 傳值:複製副本,形參為區域變數
  • 傳址/傳參考:傳遞位址,可修改實參
  • main(int argc, char* argv[]):命令列參數由作業系統初始化

10. STL 關鍵容器

map 關聯式容器

#include 
std::map m;
m[1] = "one";                 // 便利但有預設建構開銷
m.insert({2, "two"});         // 高效插入
auto it = m.find(1);          // O(log n) 查找
  • 紅黑樹實現,查找/插入/刪除皆 O(log n)
  • 迭代器失效規則:僅被操作節點失效

11. Windows 檔案系統操作

目錄遍歷 (_findfirst/_findnext/_findclose)

struct _finddata_t {
    unsigned attrib;      // 屬性位元組合
    time_t time_create;   // 建立時間
    time_t time_access;   // 最後存取
    time_t time_write;    // 最後修改
    _fsize_t size;        // 檔案大小
    char name[_MAX_FNAME]; // 檔名
};

遞迴遍歷子目錄需配合 _chdir 切換工作目錄。

檔案類型判斷 (stat)

struct stat sb;
stat(path, &sb);
switch (sb.st_mode & S_IFMT) {
    case S_IFREG:  puts("一般檔案"); break;
    case S_IFDIR:  puts("目錄"); break;
    case S_IFLNK:  puts("符號連結"); break;
    // ...
}

12. MFC 應用程式架構

  1. CWinApp:應用程式類別,InitInstance 初始化
  2. CMainFrame:主視窗框架(選單、工具列、狀態列)
  3. CChildFrame:MDI 子視窗框架
  4. CDocument:資料模型(讀寫、序列化)
  5. CView:視圖(繪圖、使用者互動)

訊息迴路:WinMain → Run → PumpMessage

13. CString 字串處理

  • CStringT 模板三具現化:CString(TCHAR)、CStringA(char)、CStringW(wchar_t)
  • 常用操作:Format、MakeUpper/Lower/Reverse、Left/Mid/Right、Find/Replace/Delete/Remove、運算子 +/+=/==
  • 格式化:str.Format(_T("a=%d, b=%.2f"), a, b);

14. 樹形與列表視圖控件

  • CTreeCtrl:InsertItem、SetImageList、GetNextSibling/Parent/Root/SelectedItem、DeleteItem/AllItems
  • CListCtrl:四種風格(Icon/SmallIcon/List/Report),InsertColumn/Item、Get/SetItemText/Data、選取管理

15. 記憶體配置函數總覽

函數來源特性釋放方式
alloca編譯器內建堆疊配置,函數返回自動釋放自動
malloc/freeC 標準庫堆配置,不呼叫建構/解構子free
callocC 標準庫配置並歸零free
reallocC 標準庫調整大小,可能移動記憶體free
new/deleteC++呼叫建構/解構子,型別安全delete/delete[]
VirtualAlloc/FreeWindows API頁面級虛擬記憶體,跨程序可用VirtualFree
HeapAlloc/FreeWindows API私有堆,不可跨程序HeapFree
GlobalAlloc/FreeWindows API全域堆,可跨程序,需 GlobalLockGlobalFree

記憶體區域劃分

  1. 堆疊:區域變數、函數參數、返回位址,編譯器自動管理
  2. 堆:動態配置,程式設計師管理
  3. 全域/靜態區:.data(已初始化)、.bss(未初始化)
  4. 常數區:字串常值、const 全域變數
  5. 程式碼區:函數二進位機器碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved