Giao diện
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
autocho 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:
- Swap Variables: Hoán đổi giá trị bằng pointers
- Array Traversal: Duyệt mảng bằng pointer arithmetic
- 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
| Concept | Python | C++ | Rust |
|---|---|---|---|
| Khai báo biến | x = 42 | int x = 42; | let x: i32 = 42; |
| Pointer | Không có | int* ptr = &x; | let ptr = &x; (reference) |
| Memory | GC tự động | Manual hoặc RAII | Ownership system |
| Null | None | nullptr | Option<T> |
Bắt đầu học
💡 CÁCH HỌC HIỆU QUẢ
- Đọc theory trong từng bài
- Chạy code examples — copy và modify
- Vẽ memory diagrams bằng tay
- Thử break code — xem compiler/runtime nói gì
"In C++, you get what you ask for. Nothing more, nothing less." — Bjarne Stroustrup