📚 C++ 程式設計完整學習指南

從零開始學習 C++ 程式語言 | 基於 C++20 標準

📑 課程目錄

Ch1 基礎介紹與環境設定
Ch2 變數與資料型態
Ch3 運算子與運算式
Ch4 流程控制
Ch5 函數
Ch6 指標與參考
Ch7 類別與物件
Ch8 繼承與多型
Ch9 STL 標準模板庫
Ch10 現代 C++ 特性

第一章:基礎介紹與環境設定 基礎

什麼是 C++?

C++ 是一種高效能的程式語言,由 Bjarne Stroustrup 於 1979 年開發。
它是 C 語言的擴展,增加了物件導向的特性。
C++ 廣泛用於:遊戲開發、系統程式、嵌入式系統、高效能運算等。

開發環境設定

// Linux (Ubuntu/Debian) sudo apt update sudo apt install build-essential g++ // 驗證安裝 g++ --version // 第一個程式 hello.cpp #include <iostream> int main() { std::cout << "Hello, C++!" << std::endl; return 0; } // 編譯與執行 g++ hello.cpp -o hello ./hello

第二章:變數與資料型態 基礎

基本資料型態

// 整數 int age = 25; short score = 100; long population = 7000000; long long worldPop = 8000000000; // 浮點數 float price = 19.99f; double pi = 3.1415926535; // 字元與布林 char grade = 'A'; bool isActive = true; // 常數 const int MAX_SIZE = 100; constexpr double GRAVITY = 9.8;

第三章:運算子 基礎

運算子

int a = 10, b = 3; // 算術運算子 a + b; // 13 加法 a - b; // 7 減法 a * b; // 30 乘法 a / b; // 3 除法 a % b; // 1 取餘數 // 比較運算子 a == b; // false a != b; // true a < b; // false // 邏輯運算子 (a > 5) && (b < 10); // AND (a > 5) || (b > 10); // OR

第四章:流程控制 基礎

條件與迴圈

// if-else if (score >= 90) { std::cout << "A"; } else if (score >= 80) { std::cout << "B"; } else { std::cout << "C"; } // for 迴圈 for (int i = 0; i < 5; i++) { std::cout << i << " "; } // while 迴圈 int i = 0; while (i < 5) { std::cout << i++ << " "; }

第五章:函數 中等

函數定義

// 函數定義 int add(int a, int b) { return a + b; } // 預設參數 void greet(std::string name, std::string prefix = "Hello") { std::cout << prefix << ", " << name << "!"; } // Lambda 函數 (C++11) auto square = [](int x) { return x * x; }; std::cout << square(5); // 25

第六章:指標與參考 進階

指標與參考

// 指針 int x = 10; int* ptr = &x; // ptr 存 x 的地址 *ptr = 20; // 修改 x 為 20 // 參考 (別名) int& ref = x; // ref 是 x 的別名 ref = 30; // x 也變成 30 // 動態記憶體 int* p = new int(42); // 配置 delete p; // 釋放 // Smart Pointer (推薦) auto smartPtr = std::make_unique<int>(42); // 自動釋放

第七章:類別與物件 中等

類別 (Class)

class Dog { private: std::string name; int age; public: // 建構函式 Dog(std::string n, int a) : name(n), age(a) {} // 成員函式 void bark() { std::cout << name << " says Woof!"; } int getAge() { return age; } }; // 使用 Dog myDog("Lucky", 3); myDog.bark();

第八章:繼承與多型 進階

繼承

class Animal { public: void eat() { std::cout << "Eating..."; } }; class Dog : public Animal { public: void bark() { std::cout << "Woof!"; } }; // 多型 class Animal { public: virtual void makeSound() { std::cout << "..."; } }; class Dog : public Animal { public: void makeSound() override { std::cout << "Woof!"; } };

第九章:STL 標準模板庫 中等

容器 (Containers)

#include <vector> #include <map> #include <string> // vector 動態陣列 std::vector<int> nums = {1, 2, 3, 4, 5}; nums.push_back(6); nums.size(); // map 鍵值對 std::map<std::string, int> scores; scores["Anzu"] = 95; scores["Fish"] = 88; // string std::string name = "Anzu"; name.length(); name.substr(1, 2);

演算法 (Algorithms)

#include <algorithm> #include <vector> std::vector<int> nums = {5, 2, 8, 1, 9}; std::sort(nums.begin(), nums.end()); // 排序 int maxVal = *std::max_element(nums.begin(), nums.end()); int minVal = *std::min_element(nums.begin(), nums.end());

第十章:現代 C++ 特性 進階

C++11/14/17/20 新特性

// auto 類型推斷 auto x = 10; // int auto name = "Anzu"; // const char* // range-based for for (auto n : nums) { std::cout << n; } // std::optional (C++17) std::optional<int> maybeNum; // std::variant (C++17) std::variant<int, std::string>> value; // concepts (C++20) template<typename T> requires std::is_integral_v<T> T add(T a, T b) { return a + b; }

📚 學習資源