Lập trình C++ từ cơ bản đến chuyên sâu, Kèm 1:1
Lập trình C++ từ cơ bản đến chuyên sâu, Kèm 1:1
Mục tiêu của khóa học
- 1) Mục tiêu kiến thức nền tảng
- Nắm vững cú pháp và cấu trúc ngôn ngữ C++ (biến, kiểu dữ liệu, toán tử, điều kiện, vòng lặp).
- Hiểu sâu về cách chương trình chạy trong bộ nhớ (stack, heap, pointer).
- Nắm chắc hàm, scope, static storage, inline, reference.
- Sử dụng C++ chuẩn (C++11 trở lên).
- 2) Mục tiêu về lập trình hướng đối tượng (OOP)
- Hiểu & áp dụng đầy đủ: class, object, inheritance, polymorphism, abstraction, encapsulation.
- Sử dụng constructor, destructor, copy/move semantics.
- Nắm rõ cơ chế virtual, override, dynamic dispatch.
- Thiết kế hệ thống OOP chuẩn industry như game đơn giản, quản lý hệ thống, mô phỏng…
- 3) Mục tiêu sử dụng thư viện & công cụ hiện đại
- Sử dụng STL chuyên sâu: vector, map, unordered_map, set, priority_queue, algorithms.
- Viết code sạch, tối ưu, theo chuẩn C++ best practices.
- Thành thạo build tool: CMake hoặc Makefile.
- Debug bằng GDB / VSCode / CLion.
Thông tin giáo viên
- Nguyễn Lê Minh
- Giáo viên C++, ôn thi HSG, ôn thi ICPC, ACM.
- Giải Khuyến khích quốc gia Tin học năm 2022
- Giải Khuyến khích quốc gia Tin học năm 2023
- Giải Nhất tỉnh Tin học năm 2022
- Giải 3 ICPC quốc gia 2023
- Giải 3 ICPC quốc gia 2024
- Giải 3 Procon quốc gia 2025
Đối tượng học viên
- Học sinh, sinh viên mất gốc lập trình C++
- Người mới bắt đầu học lập trình C++
- Sinh viên ngành Công nghệ Thông tin, và các chuyên ngành liên quan
- Những người muốn học ngôn ngữ lập trình cơ bản trước khi chuyển sang các ngôn ngữ khác
- Lập trình viên muốn củng cố kiến thức cơ bản về ngôn ngữ C++
Sự khác biệt khoá học
- 9 Lý Do nên lựa chọn Fullhouse Dev mà không phải trung tâm khác.
- 1. 100% Giáo viên đạt giải lập trình thi đấu quốc gia hoặc làm việc doanh nghiệp lớn.
- 2. Lộ trình, Slide bài giảng được biên soạn cẩn thận và chuyên sâu.
- 3. Giáo viên giảng dạy vô cùng dễ hiểu được kiểm duyệt kỹ trước khi vào lớp.
- 4. Hệ thống Website chấm tự động với 600-800 bài tập chuyên sâu có lời hướng dẫn giải.
- 5. Kèm 1:1 bất kỳ khi nào học viên cần.
- 6. Đo lường đánh giá được số bài tập làm được, số bài đúng, số bài sai, thời gian tham gia học từng bạn.
- 7. Phương pháp học châu âu Flipped Classroom, Mind Map, Mentor System.
- 8. cuộc thi định kỳ, quà tặng, nhắc nhở thúc đẩy học tập.
- 9. Chứng nhận sau khoá học.
Phương pháp giảng dạy
- Phương pháp học châu âu Flipped Classroom, Mind Map, Mentor System.
Nội dung chương trình học
GIAI ĐOẠN 1 — NỀN TẢNG LẬP TRÌNH (Buổi 1–5)
LÝ THUYẾT
● Chương trình / ngôn ngữ lập trình là gì; đọc định dạng đề
● Môi trường lập trình (IDE) & cách tìm lỗi (debug); mã nhị phân
● Tổng quan chương trình C++; biến, hằng số, kiểu dữ liệu
● Các phép toán: gán, số học, quan hệ, logic
DẠNG BÀI CHUYÊN SÂU
● Tính toán số học cơ bản; đọc/xuất đúng định dạng đề
● Chọn kiểu dữ liệu phù hợp miền giá trị (int vs long long)
● Đổi đơn vị, tính toán công thức
LỖI THƯỜNG GẶP
● Tràn kiểu (int khi giá trị lớn → phải long long)
● Chia số nguyên mất phần thập phân
● Nhầm = (gán) với == (so sánh); sai định dạng nhập/xuất
LÝ THUYẾT
● if / if-else / if lồng / if-else-if
● switch-case
● Biểu thức điều kiện & toán tử logic (&&, ||, !)
DẠNG BÀI CHUYÊN SÂU
● Phân loại, xếp loại theo điều kiện
● Xét trường hợp (casework), kiểm tra điều kiện biên
● Menu lựa chọn
LỖI THƯỜNG GẶP
● Thiếu break trong switch (rơi tầng)
● Nhầm && với ||; sai thứ tự điều kiện
● Bỏ sót trường hợp biên; so sánh số thực bằng ==
NỘI DUNG ÔN TẬP
● if / if-else / if lồng / if-else-if; switch-case
● Toán tử logic & thứ tự điều kiện
CHỮA BÀI CHUYÊN SÂU
● Luyện đề phân loại, xếp loại, xét trường hợp (casework)
● Chữa các bài if/switch học viên thường sai
LỖI TRỌNG TÂM
● Thiếu break; nhầm && với ||
● Bỏ sót trường hợp biên; điều kiện chồng lấn/mâu thuẫn
CHỮA BÀI MẪU (THEO GIÁO TRÌNH)
● Bài "bội của 3 hoặc 7 và không là bội 21": đặt sai biểu thức do chưa đọc kỹ đề → đúng là (n%3==0 || n%7==0) && n%21!=0.
● Bài dùng x = y (phép gán) thay vì x == y (so sánh): trình biên dịch vẫn dịch được, không báo lỗi, nhưng nộp bị WA.
● Bài điều kiện đúng nhưng sai kiểu dữ liệu: |a|,|b|,|c| ≤ 10^18 → phải dùng long long thay vì int.
LÝ THUYẾT
● while, vòng lặp vô tận, do-while, for
● Cấu trúc điều khiển lồng nhau
● Lệnh break và continue; biểu thức điều kiện trong vòng lặp
DẠNG BÀI CHUYÊN SÂU
● Tính tổng/tích dãy, đếm, duyệt & lọc
● In mẫu hình bằng vòng lặp lồng
● Bài toán cần dừng theo điều kiện (sentinel)
LỖI THƯỜNG GẶP
● Lặp vô tận (quên cập nhật biến điều kiện)
● Off-by-one ở cận vòng lặp
● Khởi tạo sai biến tổng (0)/tích (1); đặt break/continue nhầm chỗ
NỘI DUNG ÔN TẬP
● while / do-while / for; vòng lặp lồng nhau
● break / continue; điều kiện dừng
CHỮA BÀI CHUYÊN SÂU
● Luyện đề tổng/tích/đếm dãy, in mẫu hình, xử lý theo sentinel
● Chữa các bài vòng lặp học viên thường sai
LỖI TRỌNG TÂM
● Lặp vô tận; off-by-one ở cận
● Đặt break/continue sai chỗ; khởi tạo biến tích/tổng sai
CHỮA BÀI MẪU (THEO GIÁO TRÌNH)
● Bài kiểm tra số nguyên tố: đặt sai vị trí return 0 khiến vòng lặp dừng ngay vòng đầu tiên → phải để return sau khi đã duyệt hết.
● Bài duyệt dư một người (off-by-one): dùng i <= a (tới người thứ n) nên khi i++ thành người thứ n+1 → phải duyệt tới n-1.
GIAI ĐOẠN 2 — HÀM & LÝ THUYẾT SỐ (Buổi 6–8)
LÝ THUYẾT
● Các hàm có sẵn; cấu trúc chung của hàm; nguyên mẫu hàm
● Biến toàn cục và biến địa phương
● Tham số, đối số; truyền tham trị vs tham chiếu; nạp chồng hàm
DẠNG BÀI CHUYÊN SÂU
● Viết hàm tiện ích: gcd (Euclid), lcm, isPrime, đếm chữ số, kiểm tra đối xứng
● Một số bài hàm cơ bản: Fibonacci, số thuận nghịch (palindrome)
● Bài gcd–lcm: viết gcd rồi tính lcm = a*b/gcd
● Bài lãi kép: mỗi tháng tăng 1.1%, đếm số tháng đến khi đủ x
● Bài chọn kiểu dữ liệu phù hợp theo giới hạn đề; hàm trả nhiều kết quả qua tham chiếu
LỖI THƯỜNG GẶP
● Quên return / thiếu nhánh trả về
● Nhầm tham trị (không đổi được giá trị gốc) với tham chiếu
● Lạm dụng biến toàn cục; nguyên mẫu hàm sai chữ ký
CHỮA BÀI MẪU (THEO GIÁO TRÌNH)
● Bài lcm: a*b/gcd bị TRÀN SỐ khi a,b ≤ 1e9 (a*b vượt int) → phải để long long. Bài học: lường trước phép tính trung gian, không chỉ nhìn giới hạn của input.
● Bài lãi kép: để biến kiểu long long làm phép *1.1% bị làm tròn xuống (mất phần thập phân) → sai đáp án; phải dùng double.
● Lỗi kinh điển: không đọc kỹ giới hạn đề nên chọn int trong khi cần long long → tràn số.
LÝ THUYẾT
● Số nguyên tố & kiểm tra O(√n); số chính phương; số hoàn hảo
● Phân tích thừa số nguyên tố; GCD & LCM (thuật toán Euclid)
● Đồng dư và công thức đồng dư; lũy thừa nhị phân (aⁿ mod m); nhân Ấn Độ (chống tràn)
● Phi hàm Euler φ(n): đếm số nguyên trong [1, n] nguyên tố cùng nhau với n (nâng cao)
DẠNG BÀI CHUYÊN SÂU
● Kiểm tra / đếm / liệt kê số nguyên tố; kiểm tra số chính phương
● Phân tích một số ra thừa số nguyên tố
● Tính GCD (Euclid) và LCM
● Bài toán đồng dư; tính aⁿ mod m bằng lũy thừa nhị phân
● Tính phi hàm Euler φ(n)
LỖI THƯỜNG GẶP
● Kiểm tra nguyên tố tới n thay vì √n → chạy chậm
● Tràn số khi nhân (quên long long / nhân Ấn Độ)
● Sai công thức đồng dư với số âm; quên lấy mod ở bước trung gian
● φ(n): quên trừ bội của thừa số nguyên tố đúng công thức tích
NỘI DUNG ÔN TẬP
● Hàm: tham trị/tham chiếu, nạp chồng, đóng gói thuật toán
● Đủ bộ dạng số học: số nguyên tố, chính phương, Fibonacci, số thuận nghịch, phân tích thừa số, GCD+LCM, đồng dư, lũy thừa nhị phân, phi hàm Euler
CHỮA BÀI CHUYÊN SÂU
● Luyện & chữa từng dạng số học; gói mỗi thuật toán thành một hàm
● Chữa bài mẫu theo đúng giáo trình (gcd–lcm, lãi kép)
LỖI TRỌNG TÂM
● Tràn số & chọn sai kiểu dữ liệu
● Kiểm tra nguyên tố chưa tối ưu (tới n thay vì √n)
● Quên mod ở bước trung gian; sai công thức φ(n)
GIAI ĐOẠN 3 — MẢNG & MA TRẬN (Buổi 9–12)
LÝ THUYẾT
● Mảng một chiều: khai báo, các thao tác; bỏ qua kích thước khi khai báo
● Xâu ký tự với mảng char và với lớp string
● Mảng đánh dấu & ứng dụng trong sàng Eratosthenes
DẠNG BÀI CHUYÊN SÂU
● Tìm max/min/tổng/đếm; đảo mảng; đếm tần suất
● Sàng số nguyên tố bằng mảng đánh dấu
● Xử lý xâu cơ bản (đếm ký tự, đảo, kiểm tra)
LỖI THƯỜNG GẶP
● Truy cập ngoài giới hạn mảng → lỗi chạy
● Quên khởi tạo mảng đánh dấu; kích thước mảng khai báo quá nhỏ
● Nhầm chỉ số 0-based
NỘI DUNG ÔN TẬP
● Mảng 1 chiều: duyệt, tìm kiếm, thống kê; mảng đánh dấu
● Xâu ký tự (mảng char & string)
CHỮA BÀI CHUYÊN SÂU
● Luyện đề: max/min/tổng/đếm, đảo mảng, đếm tần suất, sàng nguyên tố
● Chữa các bài mảng/xâu học viên thường sai
LỖI TRỌNG TÂM
● Truy cập ngoài giới hạn mảng (lỗi chạy)
● Nhầm chỉ số 0-based; quên khởi tạo mảng đánh dấu
CHỮA BÀI MẪU (TÌNH HUỐNG ĐIỂN HÌNH)
● Duyệt mảng n phần tử nhưng chạy i <= n → truy cập a[n] ngoài giới hạn.
● Quên khởi tạo lại mảng đánh dấu giữa các bộ test → kết quả dính từ test trước.
● Đọc số bằng cin >> rồi getline mà chưa bỏ ký tự xuống dòng còn sót → đọc nhầm dòng rỗng.
LÝ THUYẾT
● Khai báo & truy cập mảng nhiều chiều; duyệt qua mảng nhiều chiều
● Ma trận và quan hệ với mảng 2 chiều; các loại ma trận (vuông, đơn vị, ma trận không)
● Đường chéo chính a[i][i] và đường chéo phụ a[i][n-1-i]; các phép toán trên ma trận
DẠNG BÀI CHUYÊN SÂU
● Nhập/xuất ma trận; tổng theo hàng, theo cột
● Tổng đường chéo chính và đường chéo phụ
● Cộng, trừ, nhân, chuyển vị, chia từng phần tử
● Nhận diện ma trận vuông / đơn vị / ma trận không
LỖI THƯỜNG GẶP
● Nhầm hàng với cột khi truy cập a[i][j]
● Sai chỉ số đường chéo phụ: viết a[i][n-i] thay vì a[i][n-1-i]
● Tràn số khi nhân ma trận; duyệt sai thứ tự hàng/cột
CHỮA BÀI MẪU (THEO GIÁO TRÌNH)
● Nhân ma trận: quên điều kiện SỐ CỘT A = SỐ HÀNG B → sai kích thước kết quả hoặc truy cập ngoài mảng.
● Cộng dồn tích khi nhân ma trận dễ tràn int → dùng long long cho biến tổng.
● Khai báo kích thước mảng 2 chiều cứng và quá nhỏ → truy cập ngoài giới hạn.
NỘI DUNG ÔN TẬP
● Mảng 2 chiều & ma trận; đường chéo; các phép toán ma trận
● Ma trận xoắn ốc: 4 ranh giới (trên/dưới/trái/phải) và 4 hướng di chuyển
CHỮA BÀI CHUYÊN SÂU
● Chữa: nhập/xuất ma trận, tổng hàng/cột/đường chéo, cộng/trừ/nhân/chuyển vị
● Sinh & duyệt ma trận xoắn ốc; xoay ma trận 90°
LỖI TRỌNG TÂM
● Nhầm hàng/cột; sai chỉ số đường chéo phụ (n-1-i)
● Ma trận xoắn ốc n lẻ: ô giữa bị điền hai lần hoặc bỏ sót
● Quên cập nhật ranh giới sau mỗi cạnh → lặp vô tận / ghi đè
GIAI ĐOẠN 4 — ĐỆ QUY (Buổi 13–14)
LÝ THUYẾT
● Khái niệm đệ quy; base case & bước đệ quy; call stack
● Các bài toán tiêu biểu: giai thừa, Fibonacci, Tháp Hà Nội
● Chia để trị; đệ quy vs lặp
DẠNG BÀI CHUYÊN SÂU
● Đệ quy tính toán; đệ quy trên dãy/chuỗi
● Chuyển đổi qua lại giữa đệ quy và vòng lặp
LỖI THƯỜNG GẶP
● Thiếu / sai base case → đệ quy vô hạn (tràn stack)
● Tính lặp trùng (cần ghi nhớ - memoization); đệ quy quá sâu
NỘI DUNG ÔN TẬP
● Base case & bước đệ quy; call stack; chia để trị
● Đệ quy vs lặp — khi nào dùng cái nào
CHỮA BÀI CHUYÊN SÂU
● Chữa: giai thừa, Fibonacci, tổng dãy, Tháp Hà Nội bằng đệ quy
● Chuyển một bài từ đệ quy sang lặp và ngược lại
LỖI TRỌNG TÂM
● Thiếu/sai base case (tràn stack)
● Tính lặp trùng; đệ quy quá sâu
CHỮA BÀI MẪU (TÌNH HUỐNG ĐIỂN HÌNH)
● Hàm đệ quy thiếu base case hoặc base case không bao giờ đạt tới → gọi vô hạn, tràn stack.
● Fibonacci đệ quy ngây thơ tính lại cùng giá trị rất nhiều lần → cực chậm; cần ghi nhớ (memoization).
● Tham số không tiến dần về phía base case (không giảm) → đệ quy không hội tụ.
GIAI ĐOẠN 5 — STL & THUẬT TOÁN CƠ BẢN (Buổi 15–18)
LÝ THUYẾT
● vector; iterator; pair
● set; map
● typedef; define
DẠNG BÀI CHUYÊN SÂU
● Dùng vector thay mảng động; đếm bằng map; loại trùng bằng set
● Lưu cặp giá trị bằng pair; duyệt bằng iterator
LỖI THƯỜNG GẶP
● Iterator không hợp lệ sau khi sửa container
● Nhầm set (không trùng) với multiset; quên kiểm tra container rỗng
LÝ THUYẾT
● Insertion / Bubble / Selection / Merge / Quick / Heap Sort
● Linear Search; Binary Search
● Phân tích độ phức tạp các thuật toán
DẠNG BÀI CHUYÊN SÂU
● Cài & so sánh các thuật toán sắp xếp
● Tìm kiếm nhị phân trên mảng đã sắp; định vị/đếm
LỖI THƯỜNG GẶP
● Binary search sai cận (vô tận hoặc bỏ sót)
● Quên sắp xếp trước khi tìm nhị phân
● Nhầm thuật toán ổn định / không ổn định
LÝ THUYẾT
● Hàm sort trong STL; viết comparator
● Kỹ thuật nâng cao trên mảng 1 chiều: hai con trỏ, tổng tiền tố, cửa sổ trượt
DẠNG BÀI CHUYÊN SÂU
● Sắp xếp theo tiêu chí tùy chỉnh (struct/pair)
● Two pointers; prefix sum; sliding window
LỖI THƯỜNG GẶP
● Comparator không thỏa strict weak ordering → lỗi runtime
● Nhầm < với <=; tràn khi cộng tổng tiền tố
NỘI DUNG ÔN TẬP
● Container: vector/set/map/pair/iterator
● Các thuật toán sắp xếp; tìm kiếm nhị phân; sort STL & comparator; hai con trỏ, tổng tiền tố
CHỮA BÀI CHUYÊN SÂU
● Chữa: chọn đúng container; viết comparator; tìm nhị phân đúng cận
● Luyện kỹ thuật hai con trỏ / tổng tiền tố / cửa sổ trượt
LỖI TRỌNG TÂM
● Iterator không hợp lệ; binary search sai cận
● Comparator không nhất quán; tràn khi cộng tiền tố
CHỮA BÀI MẪU (TÌNH HUỐNG ĐIỂN HÌNH)
● Binary search cập nhật l/r sai (không thu hẹp khoảng) → vòng lặp vô tận hoặc bỏ sót nghiệm.
● Comparator viết a <= b (không chặt) → vi phạm strict weak ordering, sort báo lỗi runtime.
● Xóa phần tử trong vector khi đang duyệt bằng iterator → iterator bị hỏng; cần dùng giá trị trả về của erase.
GIAI ĐOẠN 6 — CON TRỎ & CHUỖI (Buổi 19–22)
LÝ THUYẾT
● Toán tử & và toán tử *
● Tham chiếu
● Con trỏ; mảng động (new / delete)
DẠNG BÀI CHUYÊN SÂU
● Hoán đổi giá trị qua con trỏ; duyệt mảng bằng con trỏ
● Cấp phát mảng động theo kích thước nhập từ bàn phím
LỖI THƯỜNG GẶP
● Con trỏ NULL / chưa khởi tạo
● Rò rỉ bộ nhớ (quên delete); truy cập vùng đã giải phóng
● Nhầm & (địa chỉ) với * (giải tham chiếu)
Buổi 20 String & Chuẩn hóa dữ liệu
LÝ THUYẾT
● Khái niệm chuỗi ký tự; các hàm thao tác chuỗi
● Chuẩn hóa dữ liệu chuỗi
DẠNG BÀI CHUYÊN SÂU
● Tách/ghép chuỗi; chuẩn hóa (bỏ khoảng trắng thừa, viết hoa/thường)
● Đếm từ; kiểm tra chuỗi hợp lệ
LỖI THƯỜNG GẶP
● Nhầm chỉ số ký tự; getline vs cin >> (đọc thừa/thiếu dòng)
● Quên ký tự kết thúc '\0' với chuỗi C
Giải đáp và hướng dẫn chi tiết bài tập thực hành về OOP
Thảo luận về các nguyên tắc thiết kế trong OOP
LÝ THUYẾT
● Ôn xử lý chuỗi; các bài toán chuỗi nâng cao
● Giới thiệu kỹ thuật xử lý số lớn (BigNum) bằng chuỗi/mảng (mức cơ bản, tùy chọn)
DẠNG BÀI CHUYÊN SÂU
● Xử lý chuỗi phức tạp: tách token, chuẩn hóa, so khớp cơ bản
● (Tùy chọn) cộng / nhân số lớn bằng chuỗi
LỖI THƯỜNG GẶP
● Nhầm chỉ số ký tự; quên trường hợp chuỗi rỗng
● (BigNum) quên số nhớ (carry); số 0 đứng đầu
NỘI DUNG ÔN TẬP
● Con trỏ, tham chiếu, mảng động (new/delete)
● String & chuẩn hóa; xử lý chuỗi nâng cao
CHỮA BÀI CHUYÊN SÂU
● Chữa: hoán đổi qua con trỏ, cấp phát & giải phóng đúng
● Tách/chuẩn hóa chuỗi; đếm từ; kiểm tra hợp lệ
LỖI TRỌNG TÂM
● Con trỏ NULL/treo; rò rỉ bộ nhớ
● getline vs cin >>; nhầm chỉ số ký tự
CHỮA BÀI MẪU (TÌNH HUỐNG ĐIỂN HÌNH)
● Cấp phát new[] nhưng quên delete[] → rò rỉ bộ nhớ.
● Trả về con trỏ tới biến cục bộ trong hàm → con trỏ treo, dữ liệu không còn hợp lệ.
● Dùng cin >> rồi getline mà quên bỏ ký tự '\n' còn lại → getline đọc phải dòng rỗng.
GIAI ĐOẠN 7 — HƯỚNG ĐỐI TƯỢNG CƠ BẢN (Buổi 23–27)
LÝ THUYẾT
● Định nghĩa kiểu dữ liệu struct; constructor trong struct
● Operator overloading với struct
● Con trỏ kiểu struct
DẠNG BÀI CHUYÊN SÂU
● Mô hình hóa đối tượng: điểm, phân số, sinh viên
● Sắp xếp struct bằng comparator / toán tử nạp chồng; mảng struct
LỖI THƯỜNG GẶP
● Quên khởi tạo thành viên
● Nhầm truy cập qua . và ->
● Nạp chồng toán tử sai chữ ký
LÝ THUYẾT
● Các khái niệm cơ bản trong OOP; class vs struct
● Access modifier: private, protected, public
● Thuộc tính & phương thức; tạo đối tượng
DẠNG BÀI CHUYÊN SÂU
● Xây lớp cơ bản (HinhChuNhat, TaiKhoan) với getter/setter
● Tạo và sử dụng đối tượng
LỖI THƯỜNG GẶP
● Để lộ toàn bộ dữ liệu (public hết)
● Quên class mặc định là private; nhầm phạm vi truy cập
LÝ THUYẾT
● Tính trừu tượng trong OOP
● Đóng gói dữ liệu (encapsulation)
● Hàm bạn (friend) và lớp bạn
DẠNG BÀI CHUYÊN SÂU
● Che giấu dữ liệu + kiểm tra ràng buộc trong setter
● Dùng friend để nạp chồng toán tử <<
LỖI THƯỜNG GẶP
● Lạm dụng friend phá vỡ đóng gói
● Setter không kiểm tra hợp lệ dữ liệu
LÝ THUYẾT
● Constructor (mặc định, tham số, sao chép); destructor
● Nạp chồng toán tử (+, ==, <<, [])
● Sao chép sâu (deep copy) — quy tắc Rule of Three
DẠNG BÀI CHUYÊN SÂU
● Lớp Phân số / Số phức / Vector2D nạp chồng toán tử
● Lớp có bộ nhớ động cần copy constructor đúng
LỖI THƯỜNG GẶP
● Shallow copy gây double free
● Quên giải phóng trong destructor; toán tử nạp chồng trả sai kiểu
NỘI DUNG ÔN TẬP
● Struct; lớp & đối tượng; access modifier; đóng gói
● Constructor/destructor; nạp chồng toán tử; deep copy
CHỮA BÀI CHUYÊN SÂU
● Chữa: xây lớp có đóng gói đầy đủ + kiểm tra ràng buộc
● Nạp chồng toán tử cho Phân số/Vector2D; lớp có bộ nhớ động
LỖI TRỌNG TÂM
● Public hết dữ liệu; shallow copy (double free)
● Toán tử nạp chồng sai kiểu trả về; quên destructor
CHỮA BÀI MẪU (TÌNH HUỐNG ĐIỂN HÌNH)
● Lớp có con trỏ động dùng copy mặc định (shallow copy) → hai đối tượng cùng trỏ một vùng nhớ, hủy hai lần (double free); cần copy constructor sao chép sâu.
● Để thuộc tính public rồi gán giá trị không hợp lệ → mất đóng gói; nên đưa vào private + setter kiểm tra.
● Nạp chồng << đặt làm hàm thành viên thay vì friend → sai thứ tự toán hạng khi gọi cout << obj.
GIAI ĐOẠN 8 — HƯỚNG ĐỐI TƯỢNG NÂNG CAO (Buổi 28–31)
LÝ THUYẾT
● Tính kế thừa; lớp cơ sở và lớp dẫn xuất; thành viên protected
● Constructor/destructor trong kế thừa; xác định lại hàm lớp cơ sở
● Cấu trúc phân cấp lớp
DẠNG BÀI CHUYÊN SÂU
● Phân cấp Người → Sinh viên / Giảng viên; Phương tiện → Xe máy / Ô tô
● Tái sử dụng mã qua kế thừa
LỖI THƯỜNG GẶP
● Sai thứ tự gọi constructor cha/con
● Quên gọi constructor lớp cơ sở; nhầm private với protected
LÝ THUYẾT
● Tính đa hình và hàm ảo (virtual)
● Con trỏ lớp cơ sở trỏ tới đối tượng lớp dẫn xuất
● Lớp cơ sở trừu tượng và hàm ảo thuần túy
DẠNG BÀI CHUYÊN SÂU
● Mảng con trỏ lớp cơ sở gọi hàm đa hình
● Lớp trừu tượng HinhHoc → các hình; tính diện tích đa hình
LỖI THƯỜNG GẶP
● Quên virtual → gọi nhầm hàm lớp cơ sở
● Destructor không virtual gây rò rỉ khi xóa qua con trỏ cơ sở
● Quên override hàm ảo thuần túy
LÝ THUYẾT
● Khuôn mẫu hàm; khuôn mẫu lớp
● Ngoại lệ (try / throw / catch)
● Kết nối template với STL
DẠNG BÀI CHUYÊN SÂU
● Hàm/lớp template: maxOf<T>, container tổng quát
● Bắt lỗi chia 0 / truy cập ngoài giới hạn bằng ngoại lệ
LỖI THƯỜNG GẶP
● Sai cú pháp template; không suy luận được kiểu
● Bắt ngoại lệ sai kiểu
NỘI DUNG ÔN TẬP
● Kế thừa; protected; đa hình & hàm ảo; lớp trừu tượng
● Template; ngoại lệ
CHỮA BÀI CHUYÊN SÂU
● Chữa: phân cấp lớp & tái sử dụng mã; mảng con trỏ lớp cơ sở gọi đa hình
● Viết hàm/lớp template; bắt ngoại lệ
LỖI TRỌNG TÂM
● Quên virtual; destructor không virtual
● Sai thứ tự constructor cha/con; override thiếu
CHỮA BÀI MẪU (TÌNH HUỐNG ĐIỂN HÌNH)
● Gọi hàm qua con trỏ lớp cơ sở nhưng quên virtual → chạy hàm lớp cơ sở, mất đa hình.
● Xóa đối tượng dẫn xuất qua con trỏ lớp cơ sở mà destructor không virtual → hủy không đầy đủ, rò rỉ bộ nhớ.
● Lớp dẫn xuất quên gọi constructor lớp cơ sở có tham số → lỗi biên dịch.
LÝ THUYẾT
● Hệ thống lại toàn bộ: nền tảng → hàm/số học → mảng/ma trận → đệ quy → STL → con trỏ/chuỗi → OOP
● Định hướng học tiếp: khóa Cấu trúc dữ liệu, khóa ôn thi HSG
DẠNG BÀI CHUYÊN SÂU
● Dự án tổng hợp kết hợp OOP + xử lý dữ liệu + thuật toán cơ bản
● Bộ đề ôn tập cuối khóa
LỖI THƯỜNG GẶP
● Rà soát lại các lỗi cốt lõi xuyên suốt khóa học