Skip to content

Part 1: C++ Basics Beginner+

Nền tảng vững chắc — Hiểu C++ từ cách nó quản lý Memory

Dành cho ai?

Module này dành cho những người đã có kinh nghiệm lập trình cơ bản với ngôn ngữ khác (Python, JavaScript, Java). Bạn đã biết "vòng lặp là gì" — ở đây chúng ta tập trung vào điều làm C++ đặc biệt: quản lý bộ nhớ thủ công và pointers.

📋 PREREQUISITES

  • Biết cơ bản về lập trình (variables, functions, loops)
  • Có compiler C++ (g++, clang++, hoặc Visual Studio)
  • Tinh thần sẵn sàng "nghịch" với memory

Tổng quan Module

┌─────────────────────────────────────────────────────────────────────┐
│                         PART 1: BASICS                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌─────────────────┐   ┌─────────────────┐   ┌─────────────────┐   │
│  │   MEMORY        │   │   VARIABLES &   │   │   POINTERS &    │   │
│  │   MODEL         │   │   TYPES         │   │   REFERENCES    │   │
│  ├─────────────────┤   ├─────────────────┤   ├─────────────────┤   │
│  │ • Stack vs Heap │   │ • int/float/...│   │ • Address-of (&)│   │
│  │ • "Warehousing" │   │ • Type sizes    │   │ • Dereference(*)│   │
│  │ • Memory Layout │   │ • auto (C++11)  │   │ • Ptr vs Ref    │   │
│  └─────────────────┘   └─────────────────┘   └─────────────────┘   │
│          ↓                     ↓                      ↓            │
│     Hiểu nơi data              Hiểu data             Hiểu cách     │
│     được lưu trữ               types                 truy cập data │
│                                                                     │
│  ┌─────────────────┐   ┌─────────────────┐                         │
│  │    INPUT /      │   │    EXERCISES    │                         │
│  │    OUTPUT       │   │                 │                         │
│  ├─────────────────┤   ├─────────────────┤                         │
│  │ • std::cin      │   │ • Swap pointers │                         │
│  │ • std::cout     │   │ • Array access  │                         │
│  │ • Formatting    │   │ • Memory inspect│                         │
│  └─────────────────┘   └─────────────────┘                         │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

Nội dung chi tiết

1. Memory Model - Stack vs Heap

C++ cho phép bạn kiểm soát hoàn toàn bộ nhớ. Đây là thanh gươm hai lưỡi — mạnh mẽ nhưng nguy hiểm. Chúng ta sẽ dùng ẩn dụ "Kho hàng" để hiểu:

  • Stack: Kệ hàng — truy cập nhanh, tự động dọn dẹp
  • Heap: Kho lớn — linh hoạt nhưng phải tự quản lý
  • Memory Layout: .text, .data, .bss, Stack, Heap

2. Variables & Data Types

Mỗi kiểu dữ liệu trong C++ có kích thước cố định trên từng platform:

  • Primitives: int, float, double, char, bool
  • Type modifiers: signed, unsigned, short, long
  • Modern C++11: Keyword auto cho type inference
  • sizeof(): Biết chính xác memory footprint

3. Pointers & References ⚠️

Đây là phần quan trọng nhất. Nếu bạn hiểu pointers, bạn hiểu C++.

  • Pointer (*): Biến chứa địa chỉ bộ nhớ
  • Reference (&): Bí danh (alias) cho biến khác
  • Address-of (&): Lấy địa chỉ của biến
  • Dereference (*): Truy cập giá trị tại địa chỉ
  • nullptr vs NULL: Modern C++ approach

4. Input/Output

Giao tiếp với người dùng qua console:

  • std::cin, std::cout: Stream objects
  • Formatting: setw, setprecision, fixed
  • std::getline(): Đọc cả dòng text
  • Buffer flushing: std::flush, std::endl

5. Exercises

3 bài tập hands-on để củng cố kiến thức:

  1. Swap Variables: Hoán đổi giá trị bằng pointers
  2. Array Traversal: Duyệt mảng bằng pointer arithmetic
  3. Memory Inspector: In địa chỉ và giá trị của các biến

Part 2: Control Flow & Functions

6. Control Flow

Điều khiển luồng chương trình:

  • if/else: Điều kiện với C++17 initializer
  • switch/case: Với [[fallthrough]] attribute (C++17)
  • Loops: for, while, do-while, break, continue

7. Modern Loops

Range-based for loop — cách duyệt containers hiện đại:

  • C++11: for (const auto& item : collection)
  • C++17: Structured bindings for (auto& [k, v] : map)
  • So sánh: Tại sao tốt hơn C-style loops

8. Functions

Building blocks của mọi chương trình:

  • Declaration vs Definition: Tách header và source
  • Pass-by-value vs Pass-by-reference: Hiểu sâu
  • Default arguments, Overloading: Modern patterns

9. Scope & Lifetime

Phạm vi và vòng đời biến:

  • Local: Block scope, automatic lifetime
  • Global: Visible everywhere (use sparingly!)
  • Static: Persists between function calls

10. const Best Practices

Const correctness — contract với compiler:

  • const T&: Read-only, avoid copy
  • const member functions: Callable on const objects
  • constexpr: Compile-time constants

So sánh với ngôn ngữ khác

ConceptPythonC++Rust
Khai báo biếnx = 42int x = 42;let x: i32 = 42;
PointerKhông cóint* ptr = &x;let ptr = &x; (reference)
MemoryGC tự độngManual hoặc RAIIOwnership system
NullNonenullptrOption<T>

Bắt đầu học

💡 CÁCH HỌC HIỆU QUẢ

  1. Đọc theory trong từng bài
  2. Chạy code examples — copy và modify
  3. Vẽ memory diagrams bằng tay
  4. Thử break code — xem compiler/runtime nói gì

Learning Path

Part 1: Memory & Data

  1. 🧠 Memory Model — Bắt đầu từ đây
  2. 📦 Variables & Types
  3. 🎯 Pointers & References — Quan trọng nhất
  4. 📥 Input/Output
  5. 💪 Exercises

Part 2: Control & Functions 6. 🔀 Control Flow 7. 🔄 Modern Loops 8. 🔧 Functions 9. 🌍 Scope & Lifetime 10. 🛡️ const Best Practices


"In C++, you get what you ask for. Nothing more, nothing less." — Bjarne Stroustrup