C++ CƠ BẢN

💻💻💻 MỤC LỤC 💻💻💻

1. Các khái niệm cơ bản

1.1 Những ngôn ngữ khác nhau cho những mục đích khác nhau

1.1.1 So sánh ngôn ngữ tự nhiên với ngôn ngữ lập trình (1)

1.1.2 So sánh ngôn ngữ tự nhiên với ngôn ngữ lập trình (2)

1.1.3 So sánh ngôn ngữ tự nhiên với ngôn ngữ lập trình (3)

1.1.4 Ngôn ngữ lập trình C++

1.2 Bắt đầu với chương trình đầu tiên của bạn

1.2.1 Bắt đầu với chương trình đầu tiên của bạn (1)

1.2.2 Bắt đầu với chương trình đầu tiên của bạn (2)

1.2.3 Bắt đầu với chương trình đầu tiên của bạn (3)

1.2.4 Bắt đầu với chương trình đầu tiên của bạn (4)

1.2.5 Bắt đầu với chương trình đầu tiên của bạn (5)

1.2.6 Bắt đầu với chương trình đầu tiên của bạn (6)

1.3 Giá trị nguyên, biến kiểu nguyên và comment

1.3.1 Số và làm thế nào máy tính thấy chúng ?

1.3.2 Biến (1)

1.3.3 Biến (2)

1.3.4 Từ khóa

1.3.5 Comment trong source code (1)

1.3.6 Comment trong source code (2)

1.4 Số và các toán tử

1.4.1 Số dấu phẩy động (1)

1.4.2 Số dấu phẩy động (2)

1.4.3 Toán tử

1.4.4 Nhân

1.4.5 Chia

1.4.6 Cộng

1.4.7 Trừ

1.4.8 Trừ 1 ngôi

1.4.9 Cộng 1 ngôi

1.4.10 Phần dư

1.4.11 Độ ưu tiên

1.4.12 Binding

1.4.13 Danh sách độ ưu tiên

1.4.14 Dấu ngoặc đơn

1.4.15 Toán tử (tiếp)

1.4.16 Toán tử pre- và post- (1)

1.4.17 Toán tử pre- và post- (2)

1.4.18 Toán tử pre- và post- (Độ ưu tiên)

1.4.19 Toán tử rút gọn

1.5 Character

1.5.1 Kiểu character

1.5.2 Mã ASCII

1.5.3 Giá trị của kiểu character

1.5.4 Literals

1.5.5 Character literals

1.5.6 Escape characters

1.5.7 Sử dụng giá trị kiểu char như giá trị kiểu int

1.6 Flow Control

1.6.1 Hỏi và đáp giữa chương trình và máy tính

1.6.2 Câu hỏi: x bằng y ?

1.6.3 Câu hỏi: x khác y ?

1.6.4 Câu hỏi: x lớn hơn y ?

1.6.5 Câu hỏi: x lớn hơn hoặc bằng y ?

1.6.6 Câu hỏi: x nhỏ hơn hoặc bằng y ?

1.6.7 Sử dụng câu trả lời như thế nào ?

1.6.8 Bảng độ ưu tiên các toán tử

1.6.9 Điều kiện và hành động có điều kiện

1.7 Xử lý input, output

1.7.1 Input và Output

1.7.2 Output (1)

1.7.3 Output (2)

1.7.4 Output (3)

1.7.5 Output (4)

1.7.6 Output (5)

1.7.7 Output (6)

1.7.8 Input (1)

1.7.9 Input (2)

1.7.10 Input (3)

2. Câu lệnh điều khiển và cấu trúc dữ liệu

2.1 If và else – câu lệnh có điều kiện thường dùng nhất

2.1.1 Câu lệnh có điều kiện (1)

2.1.2 Câu lệnh có điều kiện (2)

2.2 Thêm một số kiểu dữ liệu và cách sử dụng

2.2.1 Không phải chỉ có int là kiểu số nguyên (1)

2.2.2 Không phải chỉ có int là kiểu số nguyên (2)

2.2.3 Không phải chỉ có int là kiểu số nguyên (3)

2.2.4 Không phải chỉ có int là kiểu số nguyên (4)

2.2.5 Kiểu Float và đặc thù của nó

2.2.6 Kiểu bool

2.3 Vòng lặp

2.3.1 Hai chương trình đơn giản (1)

2.3.2 Hai chương trình đơn giản (2)

2.3.3 Hai chương trình đơn giản (3)

2.3.4 Vòng lặp “while” (1)

2.3.5 Vòng lặp “while” (2)

2.3.6 Vòng lặp “while” (3)

2.3.7 Vòng lặp “while” (4)

2.3.8 Vòng lặp “do … while” (1)

2.3.9 Vòng lặp “do … while” (2)

2.3.10 Vòng lặp “for” (1)

2.3.11 Vòng lặp “for” (2)

2.3.12 break và continue (1)

2.3.12 break và continue (2)

2.4 Các phép toán logic

2.4.1 Máy tính và logic của nó

2.4.2 Toán tử AND: &&

2.4.3 Toán tử OR: ||

2.4.4 Toán tử NOT: !

2.4.5 Một số biểu thức logic

2.4.6 Thao tác với bit đơn lẻ (1)

2.4.7 Thao tác với bit đơn lẻ (2)

2.4.8 Thao tác với bit đơn lẻ (3)

2.4.9 Thao tác với bit đơn lẻ (4)

2.4.10 Thao tác với bit đơn lẻ (5)

2.4.11 Thao tác với bit đơn lẻ (6)

2.4.12 Thao tác với bit đơn lẻ (7)

2.5 switch – case

2.5.1 switch – case (1)

2.5.2 switch – case (2)

2.6 Mảng (Array)

2.6.1 Giới thiệu Mảng (1)

2.6.2 Giới thiệu Mảng (2)

2.6.3 Giới thiệu Mảng (3)

2.6.4 Khởi tạo Mảng

2.6.5 Các kiểu dữ liệu của Mảng

2.6.6 Mảng nhiều chiều (1)

2.6.7 Mảng nhiều chiều (2)

2.6.8 Mảng nhiều chiều (3)

2.7 Structure

2.7.1 Tại sao cần structure ? (1)

2.7.2 Tại sao cần structure ? (2)

2.7.3 Cách sử dụng struct (1)

2.7.4 Cách sử dụng struct (2)

2.7.5 Khai báo struct

2.7.6 Khởi tạo struct

3. Con trỏ, hàm và bộ nhớ

3.1 Con trỏ (Pointer)

3.1.1 Khái niệm con trỏ

3.1.2 Khai báo con trỏ

3.1.3 Gán giá trị cho con trỏ

3.1.4 Dereference con trỏ

3.1.5 Toán tử sizeof

3.2 Pointer và array

3.2.1 So sánh pointer và array

3.2.2 Phép toán số học trên pointer (1)

3.2.3 Phép toán số học trên pointer (2)

3.2.4 Phép toán số học trên pointer (3)

3.3 Giới thiệu về hàm (Function)

3.3.1 Hàm là gì ?

3.3.2 Tại sao lại cần hàm ?

3.3.3 Làm quen với hàm (1)

3.3.4 Làm quen với hàm (2)

3.4 Khai báo và đinh nghĩa hàm

3.4.1 Khai báo và định nghĩa hàm (1)

3.4.2 Khai báo và định nghĩa hàm (2)

3.4.3 Ví dụ về hàm (1)

3.4.4 Ví dụ về hàm (2)

3.4.5 Ví dụ về hàm (3)

3.4.6 Lời gọi hàm (invocation syntax)

3.5 Truyền dữ liệu cho hàm và lấy dữ liệu từ hàm

3.5.1 Side effects

3.5.2 Truyền tham trị cho hàm

3.5.3 Truyền tham chiếu cho hàm (1)

3.5.4 Truyền tham chiếu cho hàm (2)

3.5.5 Truyền tham chiếu cho hàm (3)

3.5.6 Truyền tham trị cho hàm

3.6 Tham số mặc định

3.6.1 Tham số mặc định (1)

3.6.2 Tham số mặc định (2)

3.6.3 Tham số mặc định (3)

3.7 Hàm nội tuyến

3.7.1 Giải phẫu một lời gọi hàm

3.7.2 Prologues và epilogues

3.7.3 Hàm nội tuyến

3.8 Nạp chồng hàm

3.8.1 Các công cụ khác nhau cho những việc khác nhau

3.8.2 Cơ chế hoạt động của nạp chồng hàm (1)

3.8.3 Cơ chế hoạt động của nạp chồng hàm (2)

3.8.4 Giới thiệu về toán tử điều kiện

3.9 Cấp phát động bộ nhớ

3.9.1 void – kiểu dữ liệu đặc biệt

3.9.2 Cấp phát bộ nhớ động (1)

3.9.3 Cấp phát bộ nhớ động (2)

4. Một số kiến thức bổ trợ về kiểu dữ liệu

4.1 Mảng nhiều chiều

4.1.1 Mảng con trỏ (1)

4.1.2 Mảng con trỏ (2)

4.1.3 Ma trận tam giác

4.2 Chuyển đổi kiểu dữ liệu

4.2.1 Chuyển đổi kiểu dữ liệu là gì ?

4.2.2 Chuyển đổi kiểu dữ liệu ngầm định (Implicit conversions)

4.2.3 Chuyển đổi kiểu dữ liệu tường minh (Explicit conversions)

4.2.4 Được và mất khi chuyển đổi kiểu dữ liệu (1)

4.2.5 Được và mất khi chuyển đổi kiểu dữ liệu (2)

4.2.6 Được và mất khi chuyển đổi kiểu dữ liệu (3)

4.2.7 Được và mất khi chuyển đổi kiểu dữ liệu (4)

4.2.8 Được và mất khi chuyển đổi kiểu dữ liệu (5)

4.2.9 Promotions

4.3 String

4.3.1 String là gì ?

4.3.2 Khởi tạo string

4.3.3 Toán tử của string: +

4.3.4 Toán tử của string: +=

4.3.5 Nhập string

4.3.6 So sánh string (1)

4.3.7 So sánh string (2)

4.3.8 Chuỗi con (Substring)

4.3.9 Độ dài của string

4.3.10 Chi tiết hơn về so sánh string

4.3.11 Tìm một chuỗi trong chuỗi khác

4.3.12 Kích thước thực của string

4.3.13 Kiểm soát kích thước của string

4.3.14 Kiểm soát nội dung của string

4.3.15 Nối string (Appending)

4.3.16 Chèn string (Inserting )

4.3.17 Chỉ định string (Assigning)

4.3.18 Thay thế string (Replacing)

4.3.19 Xóa string (Erasing)

4.3.20 Hoán đổi nội dung của 2 string

4.4 Name spaces

4.4.1 Name spaces là tất cả những gì xung quanh chúng ta

4.4.2 Giới thiệu về name spaces trong C++

4.4.3 Định nghĩa một name space

4.4.4 Sử dụng một name space

4.4.5 Mở rộng một name space

4.4.6 Sử dụng một thực thể trong name space

4.4.7 Name space nặc danh

4.4.8 Đổi tên một name space

5. Kiến thức cơ bản về lập trình hướng đối tượng

5.1 Các khái niệm cơ bản về lập trình hướng đối tượng

5.1.1 Lớp và đối tượng trong đời thực

5.1.2 Khái niệm lớp (class)

5.1.3 Khái niệm đối tượng (object)

5.1.4 Kế thừa

5.1.5 Các đối tượng có những gì ?

5.1.6 Tất cả những thứ này để làm gì ?

5.2 Ngăn xếp (Stack)

5.2.1 Stack và LIFO

5.2.2 Con trỏ stack

5.2.3 Push

5.2.4 Pop

5.2.5 Hoạt động của stack

5.2.6 Ưu điểm và nhược điểm của stack theo phương pháp hướng thủ tục

5.2.7  Stack theo phương pháp hướng đối tượng (1)

5.2.8  Stack theo phương pháp hướng đối tượng (2)

5.2.9  Stack theo phương pháp hướng đối tượng (3)

5.2.10  Stack theo phương pháp hướng đối tượng (4)

5.2.11  Stack theo phương pháp hướng đối tượng (5)

5.3 Giải phẫu class

5.3.1 Các thành phần của class

5.3.2 Đặc tả truy cập

5.3.3 Tạo một đối tượng

5.3.4 Ghi đè tên thành phần của class

5.3.5 Con trỏ “this”

5.3.6 Làm rõ tên của phần tử

5.3.7 Hàm khởi tạo (constructor)

5.3.8 Nạp chồng hàm khởi tạo (1)

5.3.9 Nạp chồng hàm khởi tạo (2)

5.3.10 Hàm khởi tạo sao chép (Copying constructors)

5.3.11 Rò rỉ bộ nhớ (Memory leaks)

5.3.12 Hàm hủy (Destructors)

5.4 Các thành phần Static

5.4.1 Từ khóa “auto” (1)

5.4.2 Từ khóa “auto” (2)

5.4.3 Thể hiện của lớp

5.4.4 Các thành phần static của class

5.4.5 Biến static của class (1)

5.4.6 Biến static của class (2)

5.4.7 Biến static của class (3)

5.4.8 Quan hệ giữa các thành phần static và non-static

5.4.9 Thành phần static truy cập vào thành phần static

5.4.10 Thành phần static truy cập vào thành phần non-static

5.4.11 Thành phần non-static truy cập vào thành phần static

5.4.12 Thành phần non-static truy cập vào thành phần non-static

5.5 Con trỏ trỏ đến đối tượng và đối tượng bên trong đối tượng

5.5.1 Con trỏ trỏ đến đối tượng

5.5.2 Truy cập biến thành viên của đối tượng thông qua con trỏ

5.5.3 Truy cập hàm thành viên của đối tượng thông qua con trỏ

5.5.4 Cơ chế lựa chọn hàm khởi tạo

5.5.5 Mảng các con trỏ trỏ đến đối tượng (1)

5.5.6 Mảng các con trỏ trỏ đến đối tượng (2)

5.5.7 Đối tượng bên trong đối tượng (1)

5.5.8 Đối tượng bên trong đối tượng (2)

5.5.9 Đối tượng bên trong đối tượng (3)

5.5.10 Đối tượng bên trong đối tượng (4)

6. Kế thừa, đa hình, lớp bạn và hàm bạn

6.1 Phân cấp class

6.1.1 Định nghĩa một phân lớp đơn giản (1)

6.1.2 Định nghĩa một phân lớp đơn giản (2)

6.1.3 Định nghĩa một phân lớp đơn giản (3)

6.1.4 Định nghĩa một phân lớp đơn giản (4)

6.1.5 Định nghĩa một phân lớp đơn giản (5)

6.1.6 Định nghĩa một phân lớp đơn giản (6)

6.2 Kế thừa và vấn đề tương thích kiểu

6.2.1 Tương thích kiểu – trường hợp đơn giản nhất

6.2.2 Tương thích kiểu – trường hợp phức tạp hơn (1)

6.2.3 Tương thích kiểu – trường hợp phức tạp hơn (2)

6.2.4 Tương thích kiểu – ép kiểu tĩnh

6.2.5 Tương thích kiểu – quay lại với Pet

6.2.6 Tương thích kiểu – ép kiểu động

6.2.7 Tương thích kiểu – trường hợp cuối cùng

6.3 Đa hình và hàm ảo

6.3.1 Ghi đè phương thức trong lớp dẫn xuất (1)

6.3.2 Ghi đè phương thức trong lớp dẫn xuất (2)

6.3.3 Ghi đè phương thức trong lớp dẫn xuất (3)

6.3.4 Ghi đè phương thức trong lớp dẫn xuất (4)

6.3.5 Ghi đè phương thức trong lớp dẫn xuất (5)

6.4 Sử dụng đối tượng làm tham số và ép kiểu động

6.4.1 Truyền vào một đối tượng cho tham số của hàm

6.4.2 Truyền vào một đối tượng theo kiểu tham trị

6.4.3 Truyền vào một đối tượng của lớp dẫn xuất (1)

6.4.4 Truyền vào một đối tượng của lớp dẫn xuất (2)

6.4.5 Toán tử ép kiểu động (dynamic_cast) (1)

6.4.6 Toán tử ép kiểu động (dynamic_cast) (2)

6.4.7 Toán tử ép kiểu động (dynamic_cast) (3)

6.5 Bổ sung một số vấn đề liên quan đến khởi tạo đối tượng

6.5.1 Hàm khởi tạo sao chép – copying constructors (1)

6.5.2 Hàm khởi tạo sao chép – copying constructors (2)

6.5.3 Hàm khởi tạo sao chép – copying constructors (3)

6.5.4 Hàm khởi tạo sao chép – copying constructors (4)

6.5.5 Hàm khởi tạo sao chép – copying constructors (5)

6.5.6 Hàm khởi tạo sao chép – copying constructors (6)

6.5.7 Hàm khởi tạo mặc định – default constructors (1)

6.5.8 Hàm khởi tạo mặc định – default constructors (2)

6.5.9 Hàm khởi tạo mặc định – default constructors (3)

6.5.10 Kết hợp nhiều class để tạo ra class mới – composition (1)

6.5.11 Kết hợp nhiều class để tạo ra class mới – composition (2)

6.5.12 Kết hợp nhiều class để tạo ra class mới – composition (3)

6.6 Từ khóa const

6.6.1 Hằng số trong C++

6.6.2 Biến hằng

6.6.3 Tổ hợp hằng

6.6.4 Con trỏ hằng

6.6.5 Con trỏ trỏ đến hằng số

6.6.6 Con trỏ hằng trỏ đến hằng số

6.6.7 Tham số của hàm là hằng số (1)

6.6.8 Tham số của hàm là hằng số (2)

6.6.9 Giá trị trả về của hàm là hằng số

6.6.10 Biến hằng của class

6.6.11 Đối tượng hằng

6.6.12 Phương thức hằng của class

6.7 Hàm bạn và lớp bạn trong C++

6.7.1 Tình bạn trong C++

6.7.2 Lớp bạn (friend class)

6.7.3 Một số quy tắc về lớp bạn

6.7.4 Hàm bạn

7. Toán tử và kiểu enum

7.1 Cơ bản về nạp chồng toán tử

7.1.1 Nhắc lại về toán tử (1)

7.1.2 Nhắc lại về toán tử (2)

7.1.3 Tổng quan nội dung về nạp chồng toán tử

7.1.4 Code toán tử << (1)

7.1.5 Code toán tử << (2)

7.1.6 Code toán tử >> (1)

7.1.7 Code toán tử >> (2)

7.1.8 Cải tiến toán tử << (1)

7.1.9 Cải tiến toán tử << (2)

7.1.10 Cải tiến toán tử >>

7.1.11 Toán tử độc lập

7.1.12 Code toán tử chỉ mục cho stack (1)

7.1.13 Code toán tử chỉ mục cho stack (2)

7.2 Kiểu enum

7.2.1 Kiểu enum dùng để làm gì ? (1)

7.2.2 Kiểu enum dùng để làm gì ? (2)

7.2.3 Kiểu enum dùng để làm gì ? (3)

7.2.4 Làm thế nào để định nghĩa kiểu enum ?

7.2.5 Sử dụng kiểu enum như thế nào ? (1)

7.2.6 Sử dụng kiểu enum như thế nào ? (2)

7.2.7 Sử dụng kiểu enum như thế nào ? (3)

7.2.8 Sử dụng kiểu enum như thế nào ? (4)

7.2.9 Sử dụng kiểu enum như thế nào ? (5)

7.2.10 Sử dụng kiểu enum như thế nào ? (6)

7.2.11 Sử dụng kiểu enum như thế nào ? (7)

7.3 Chi tiết hơn về nạp chồng toán tử

7.3.1 Khuyến cáo

7.3.2 Số lượng tham số của toán tử

7.3.3 Điều gì chúng ta không được làm ?

7.3.4 Toán tử số học

7.3.5 Toán tử xử lý bit

7.3.6 Toán tử gán

7.3.7 Toán tử quan hệ

7.3.8 Toán tử logic

7.3.9 Toán tử gán kết hợp

7.3.10 Toán tử tăng và giảm dạng tiền tố

7.3.11 Toán tử tăng và giảm dạng hậu tố

7.3.12 Toán tử chỉ mục

7.3.13 Toán tử gọi hàm

7.3.14 Toán tử con trỏ

7.3.15 Một số toán tử khác có thể nạp chồng

7.3.16 Các toán tử không cho phép nạp chồng

Soạn lại từ nguồn https://education.cppinstitute.org