Class trong C++ là gì? Hướng dẫn dễ hiểu cho người mới học
Thịnh Văn Hạnh
23/05/2026
2340 Lượt xem
Chia sẻ bài viết
Class trong C++ là một trong những kiến thức nền tảng khi học lập trình hướng đối tượng. Nếu biến, hàm và mảng giúp bạn xử lý dữ liệu đơn lẻ, thì class giúp bạn gom dữ liệu và hành vi của một đối tượng vào cùng một cấu trúc rõ ràng hơn.
Hiểu đúng về class trong C++ sẽ giúp bạn viết chương trình dễ quản lý, dễ mở rộng và ít lỗi hơn. Đây cũng là bước quan trọng trước khi học sâu hơn về object, constructor, destructor, kế thừa, đóng gói và đa hình trong C++.

Tóm Tắt Bài Viết
- Class trong C++ là gì?
- Ví dụ về class trong C++
- Làm sao để khai báo class trong C++
- Lỗi thường gặp khi dùng class trong C++
- Quên dấu chấm phẩy sau class
- Truy cập trực tiếp vào thuộc tính private
- Quên khai báo public
- Constructor có tên không trùng với tên class
- Constructor có kiểu dữ liệu trả về
- Gọi constructor sai cách khi tạo object
- Khai báo hàm trong class nhưng quên định nghĩa
- Nhầm lẫn giữa class và object
- Quên include thư viện cần thiết
- Không khởi tạo giá trị ban đầu cho thuộc tính
- Hướng dẫn sử dụng class trong C++
- Câu hỏi thường gặp về class trong C++
- Class trong C++ dùng để làm gì?
- Class và object khác nhau như thế nào?
- Class trong C++ có bắt buộc dùng public không?
- Vì sao thuộc tính trong class thường để private?
- Class khác struct trong C++ ở điểm nào?
- Constructor trong class C++ là gì?
- Destructor trong class C++ là gì?
- Có thể tạo nhiều object từ một class không?
Class trong C++ là gì?
Class trong C++ là một kiểu dữ liệu do lập trình viên tự định nghĩa, được dùng để mô tả một nhóm đối tượng có cùng đặc điểm và hành vi. Trong C++, class được khai báo bằng từ khóa class và có thể chứa các biến cũng như các hàm bên trong. Đây là nền tảng quan trọng của lập trình hướng đối tượng, giúp chương trình được tổ chức rõ ràng, dễ quản lý và dễ mở rộng hơn.
Hiểu đơn giản, class là một bản thiết kế trừu tượng cho các đối tượng. Mỗi đối tượng, hay còn gọi là object, là một thể hiện cụ thể của class. Ví dụ, nếu class là bản thiết kế của “xe ô tô”, thì từng chiếc xe cụ thể được tạo ra từ bản thiết kế đó chính là object.
Một class trong C++ thường bao gồm hai thành phần chính: thuộc tính và phương thức. Thuộc tính, còn gọi là property hoặc attribute, dùng để lưu trữ đặc điểm của đối tượng. Phương thức, còn gọi là method hoặc hàm thành phần, dùng để mô tả hành vi hoặc thao tác mà đối tượng có thể thực hiện.
Trong lập trình hướng đối tượng, object thường được mô hình hóa từ các sự vật hoặc thực thể trong thế giới thực. Nhờ đó, lập trình viên có thể biểu diễn dữ liệu và hành vi một cách tự nhiên hơn. Vì vậy, nắm rõ khái niệm class trong C++ là gì sẽ giúp bạn hiểu tốt hơn cách xây dựng chương trình theo hướng đối tượng.
Ví dụ về class trong C++
Định nghĩa class trong C++ có thể hiểu là quá trình tạo ra một bản thiết kế, hay còn gọi là blueprint, cho một kiểu dữ liệu do lập trình viên tự xây dựng. Bản thiết kế này cho biết class có tên là gì, đối tượng được tạo từ class đó sẽ chứa những thành phần nào và có thể thực hiện những hành động gì.
Về cấu trúc, một class trong C++ thường bắt đầu bằng từ khóa class, tiếp theo là tên class. Sau đó là phần thân class, hay còn gọi là body của class, được đặt bên trong cặp dấu ngoặc nhọn {}. Đây là nơi lập trình viên khai báo các thuộc tính và phương thức cần thiết cho đối tượng.
Một điểm quan trọng cần nhớ là sau khi kết thúc phần định nghĩa class, bạn phải thêm dấu chấm phẩy ;. Đây là cú pháp bắt buộc trong C++. Nếu thiếu dấu này, chương trình có thể báo lỗi khi biên dịch. Nhờ cách tổ chức này, class giúp mã nguồn rõ ràng hơn, dễ quản lý hơn và phù hợp với cách xây dựng chương trình theo hướng đối tượng.
Public trong C++ là từ khóa dùng để xác định phạm vi truy cập của các thành viên trong class. Khi thuộc tính hoặc phương thức được khai báo sau public, chúng có thể được truy cập từ bên ngoài class thông qua đối tượng tương ứng.
Hiểu đơn giản, public giúp class “mở” một số dữ liệu hoặc hành vi cho chương trình bên ngoài sử dụng. Ngoài public, C++ còn có hai phạm vi truy cập khác là private và protected, dùng để kiểm soát và bảo vệ dữ liệu tốt hơn trong lập trình hướng đối tượng.

Làm sao để khai báo class trong C++
Việc định nghĩa một class không đồng nghĩa với việc đã có sẵn bộ nhớ được phân bổ cho các đối tượng thuộc class đó. Thực tế, mới chỉ có đặc tả cho đối tượng là đã được xác định. Chính vì vậy, muốn sử dụng các hàm truy cập trong class cũng như dữ liệu, bạn phải tiến hành khai báo đối tượng.
hocsinh obj_1;
hocsinh obj_2;
Cả hai đối tượng obj_1 và obj_2 đều có bản sao của các thành viên dữ liệu (Data Member) riêng biệt. Xét ví dụ trên, chúng ta có thể hình dung như sau:
Đối tượng obj_1 sẽ có các phương thức tên, tuổi, quê quán, trường, lớp, điểm toán, điểm văn… cũng như các hành vi đi, đứng, ngồi, học tập… khác biệt so với đối tượng obj_2.
Điều này đồng nghĩa với việc dữ liệu thành viên của 2 object là riêng biệt. Dữ liệu obj_1 không bị biến đổi khi obj_2 thay đổi và ngược lại. Các dữ liệu thành viên thuộc obj_1 cũng không có quyền truy cập, tác động đến dữ liệu tương ứng bên phía obj_2.
Lỗi thường gặp khi dùng class trong C++
Khi mới học class trong C++, người học rất dễ gặp lỗi do chưa hiểu rõ cú pháp, phạm vi truy cập, constructor hoặc cách tạo object. Dưới đây là các lỗi phổ biến nhất và cách khắc phục.
Quên dấu chấm phẩy sau class
Trong C++, sau khi khai báo class bắt buộc phải có dấu ;. Đây là lỗi rất phổ biến với người mới học.
Truy cập trực tiếp vào thuộc tính private
Mặc định, các thành phần trong class C++ là private nếu không khai báo phạm vi truy cập. Vì vậy, bạn không thể truy cập trực tiếp từ bên ngoài class.
Quên khai báo public
Nếu không khai báo public, các thuộc tính và phương thức trong class sẽ mặc định là private.
Constructor có tên không trùng với tên class
Constructor bắt buộc phải có tên giống hệt tên class. Nếu viết sai tên, chương trình sẽ hiểu đó là một hàm bình thường.
Constructor có kiểu dữ liệu trả về
Constructor không được có kiểu dữ liệu trả về, kể cả void.
Gọi constructor sai cách khi tạo object
Khi class có constructor có tham số, bạn phải truyền đúng số lượng và đúng kiểu dữ liệu.
Khai báo hàm trong class nhưng quên định nghĩa
Bạn có thể khai báo phương thức trong class và định nghĩa bên ngoài class. Tuy nhiên, nếu chỉ khai báo mà không định nghĩa, chương trình sẽ báo lỗi khi gọi hàm.
Nhầm lẫn giữa class và object
Class chỉ là khuôn mẫu, không phải đối tượng cụ thể. Muốn dùng thuộc tính hoặc phương thức thông thường, bạn cần tạo object.
Quên include thư viện cần thiết
Nếu dùng string, cout, cin nhưng không khai báo thư viện tương ứng, chương trình sẽ báo lỗi.
Không khởi tạo giá trị ban đầu cho thuộc tính
Nếu thuộc tính không được khởi tạo, nó có thể chứa giá trị rác. Điều này dễ làm chương trình chạy sai kết quả.
Hướng dẫn sử dụng class trong C++
Phạm vi truy cập các thành viên (access modifier)
Access modifier là phạm vi truy cập của các thuộc tính và phương thức, được khai báo ở phía bên dưới. Trong ngôn ngữ C++, có 3 loại phạm vi truy cập là public, private và protected.
Với các thuộc tính và phương thức khai báo public, mọi thứ khá đơn giản bởi bạn được quyền truy cập trực tiếp thông quan instance thuộc class đó. Bạn có thể truy cập chúng thông qua việc sử dụng toán tử truy cập thành viên trực tiếp là dấu chấm (.). Kiểu public thường được sử dụng khi không có ràng buộc điều kiện nào trước khi gán (tức là có thể tùy ý gán giá trị) cũng như nếu không cần xử lý trước khi trả về.

Khi đó, để có thể tiếp cận các thuộc tính private, cần phải thông qua các phương thức public một cách gián tiếp. Trong số các phương pháp, getter và setter là hai loại phổ biến nhất. Trong trường hợp bạn không muốn người khác có khả năng thay đổi giá trị một cách tự do, hoặc bạn muốn thực hiện một số xử lý cuối cùng trước khi trả về giá trị, việc sử dụng phạm vi private sẽ là lựa chọn có lý hơn.
Về phạm vi protected, các phương thức và thuộc tính chỉ có thể được truy cập thông qua các lớp kế thừa hoặc lớp đó chính nó. Đây là một phương pháp phức tạp, đòi hỏi sự tìm hiểu kỹ về C++.
Getter và setter
Như đã đề cập, thuộc tính riêng tư không thể truy cập trực tiếp từ bên ngoài mà cần sử dụng các hàm getter và setter. Hàm getter được dùng để truy xuất giá trị của thuộc tính, trong khi hàm setter được sử dụng để gán giá trị cho thuộc tính.
Việc sử dụng getter và setter có tính quan trọng cao trong việc kiểm soát những thuộc tính có yêu cầu về độ chính xác cao của giá trị. Chẳng hạn, nếu ta có thuộc tính “tuổi” để lưu trữ dữ liệu về độ tuổi của mỗi người, và giới hạn tuổi trong khoảng từ 0 đến 120, thì ta không thể cho phép chương trình lưu trữ giá trị âm hoặc lớn hơn 120 cho thuộc tính này.

Thuộc tính riêng tư được sử dụng với mục đích không cho phép người khác tự do gán giá trị, mà cần bạn xử lý dữ liệu trước khi trả về. Hàm getter và setter giúp thực hiện điều này.
Một điều cần chú ý là việc đặt tên cho getter và setter sao cho dễ phân biệt, tránh nhầm lẫn giữa hai chức năng.
Định nghĩa phương thức
Tính chất cơ bản của phương thức không khác biệt so với một hàm thông thường. Nó có thể được trang bị tham số hoặc không, có thể không trả về giá trị hoặc thực hiện việc ghi đè lên hàm. Khi truyền tham số vào phương thức, cách tiếp cận đầu tiên là đặt tên tham số trùng với thuộc tính của lớp bằng cách sử dụng toán tử :: cùng với con trỏ this. Cách tiếp cận thứ hai là đặt tên tham số khác với tên của thuộc tính (thường bằng cách thêm dấu gạch dưới _ vào đầu tên tham số, tương tự như tên của thuộc tính private).
Đối với việc định nghĩa thi hành phương thức, có hai phương pháp chính: Định nghĩa thi hành trong quá trình định nghĩa lớp và định nghĩa thi hành ở ngoài lớp.
Static member
Gọi là thành viên tĩnh, trong ngữ cảnh của lớp C++, static member cũng tương đối tương đồng với biến tĩnh trong hàm khi dịch sang tiếng Việt. Nếu so với hàm, biến tĩnh trong hàm không bị hủy sau khi khối lệnh thực thi và thoát ra ngoài, tương tự, với lớp, thành viên tĩnh là một thuộc tính chung cho tất cả các đối tượng thuộc lớp đó, ngay cả khi không có bất kỳ đối tượng nào tồn tại. Để hiểu rõ hơn, điều này có nghĩa là bạn có thể khai báo nhiều đối tượng với mỗi đối tượng sở hữu các thuộc tính riêng biệt, tuy nhiên, chỉ có duy nhất một thành viên tĩnh tồn tại trong toàn bộ chương trình.

Hàm thành viên trong lớp
Có 2 cách để xác định hàm thành viên trong C++ là xác định bên trong lớp và xác định bên ngoài lớp.
Để xác định hàm thành viên bên ngoài lớp, ta cần phải thông qua toán tử scope :: , đi kèm là tên lớp cùng tên phương thức. Mặc dù toàn bộ hàm thành viên được định nghĩa bên trong lớp bởi các inline mặc định, dẫu vậy với từ khóa inline, bạn hoàn toàn có thể thực hiện bất kỳ hàm không thuộc lớp nào. Inline chính là cách gọi rút gọn của inline function – hàm nội tuyến. Đây là những hàm thực tế, được sao chép mọi nơi suốt quá trình biên dịch như macro tiền xử lý, nhờ đó giúp tiết kiệm thời gian gọi hàm.
Câu hỏi thường gặp về class trong C++
Class trong C++ dùng để làm gì?
Class trong C++ dùng để tạo khuôn mẫu cho đối tượng. Nó giúp gom dữ liệu và hàm xử lý vào cùng một cấu trúc, từ đó chương trình dễ quản lý, dễ mở rộng và phù hợp với lập trình hướng đối tượng.
Class và object khác nhau như thế nào?
Class là bản thiết kế, còn object là đối tượng cụ thể được tạo ra từ class. Ví dụ, Student là class, còn Student s1; là object.
Class trong C++ có bắt buộc dùng public không?
Không bắt buộc. Tuy nhiên, nếu muốn truy cập thuộc tính hoặc phương thức từ bên ngoài class, bạn cần khai báo chúng trong phạm vi public.
Vì sao thuộc tính trong class thường để private?
Thuộc tính thường để private để bảo vệ dữ liệu. Khi dữ liệu được che giấu, bạn có thể kiểm soát việc đọc và ghi thông qua getter, setter hoặc các phương thức public.
Class khác struct trong C++ ở điểm nào?
Khác biệt chính là phạm vi truy cập mặc định. Trong class, thành phần mặc định là private. Trong struct, thành phần mặc định là public.
Constructor trong class C++ là gì?
Constructor là hàm đặc biệt được gọi tự động khi object được tạo. Constructor thường dùng để khởi tạo giá trị ban đầu cho object.
Destructor trong class C++ là gì?
Destructor là hàm đặc biệt được gọi tự động khi object bị hủy. Destructor thường dùng để giải phóng tài nguyên hoặc xử lý công việc cuối cùng trước khi object kết thúc vòng đời.
Có thể tạo nhiều object từ một class không?
Có. Một class có thể tạo ra nhiều object khác nhau. Mỗi object có dữ liệu riêng nhưng cùng dùng chung cấu trúc được định nghĩa trong class.
Trên hết, việc hiểu và áp dụng kiến thức về lập trình hướng đối tượng và lớp Class trong C++ là một bước quan trọng đối với những người mới học lập trình hoặc đang tìm hiểu về ngôn ngữ này. Class chính là cơ sở để bạn xây dựng các ứng dụng phức tạp và cấu trúc chương trình theo cách trực quan và cấu trúc hơn.
Trên đây là những kiến thức vô cùng đầy đủ và dễ hiểu về Class trong C++. Hy vọng những kiến thức này sẽ giúp bạn có thêm am hiểu về ngôn ngữ C++, và ứng dụng một cách thích hợp vào các công việc để đem lại hiệu quả nhất định.
>Xem thêm:



































