Bạn muốn tìm hiểu và học về ngôn ngữ C++, đầu tiên bạn cần tìm hiểu về các kiến thức cơ bản của class trong C++. Vì class là nhân tố trung tâm, là tính năng không thể thiếu trong C++ để hỗ trợ cho việc lập trình hướng đối tượng (Object).
Hãy cùng Vietnix khám phá những kiến thức căn bản về class trong C ++ là gì sau đây.
Class trong C++ là gì?
Class (lớp) trong C++ là một khái niệm được người dùng và các nhà phát triển định nghĩa như một kiểu dữ liệu đơn giản hoặc một cấu trúc dữ liệu. Các dữ liệu này được khai báo bởi từ khóa class và chứa các biến hay các hàm.
Trong C++, class được định nghĩa là một mô tả trừu tượng (abstract) của nhóm các đối tượng (object) có cùng bản chất. Mặt khác, mỗi đối tượng sẽ là thể hiện cụ thể (instance) của những mô tả trừu tượng đó.
Về cơ bản, một class sẽ gồm những thành phần dữ liệu (thuộc tính hoặc property) và phương thức (hàm thành phần hoặc method). Ở ngôn ngữ lập trình này, class thực chất là một kiểu dữ kiểu được chính người lập trình tự định nghĩa, và từ khóa class
sẽ xác định điểm bắt đầu của một class được cài đặt.
Về định nghĩa đối tượng, các object trong lập trình hướng đối tượng được xem là một thực thể trừu tượng của một sự vật trong thế giới thực. Thực thể này sẽ được con người mô hình hóa, lưu giữ những đặc điểm, hành vi, từ đó tạo ra các thuộc tính (Attribute) và phương thức (Method) của đối tượng.
Ví dụ về class trong C++
Định nghĩa 1 lớp có thể hiểu là là định nghĩa một blueprint cho một kiểu dữ liệu. Nói đơn giản hơn, việc này sẽ xác định các yếu tố như tên lớp, những thứ đối tượng của lớp đó sẽ bao hàm cũng như các hoạt động có thể thực hiện lên đối tượng này.
Phần đầu tiên của định nghĩa class được mở đầu bằng từ khóa class
, tiếp đến là tên class và phần body của class. Những thành phần này được bao quanh trong dấu {}
. Theo sau định nghĩa class bắt buộc phải là dấu chấm phẩy ;
hoặc một danh sách các khai báo.
Một ví dụ về định nghĩa kiểu dữ liệu Box bằng cách dùng từ khóa class trong C++:
class Box
{
public: double chieudai;
// chieu dai box
double chieurong;
// chieu rong box
double chieucao;
// chieu cao box
};
Từ khóa public xác định rõ các thuộc tính truy cập của thành viên class theo sau nó. Với kiểu public, thành viên có thể được truy cập từ bên ngoài, miễn là nằm trong phạm vi (scope) của đối tượng class đó. Ngoài public, bạn cũng có thể để phạm vi truy cập là private và protected, thứ được đề cập ở phần bên dưới.
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:
<đoạn này cần chèn ví dụ code>
Đố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.
>> Xem thêm: C Sharp là gì? Ứng dụng của ngôn ngữ lập trình C#
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ề.
<đoạn này cần chèn ví dụ code access modifier public>
Trong khi đó, cần phải gián tiếp thông qua các phương thức public thì mới có thể truy cập các thuộc tính private. Hai loại phương thức phổ biến hơn cả là getter và setter. Trong trường hợp bạn không muốn người khác được quyền tùy ý thay đổi giá trị, hoặc bạn muốn xử lý lần cuối trước khi trả về, để phạm vi private sẽ là lựa chọn hợp lý hơn cả.
Còn với kiểu protected, các phương thức và thuộc tính chỉ được phép truy cập bằng các class kế thừa nó hoặc chính nó. Đây là một phương pháp khó, cần tìm hiểu sâu hơn về C++.
>> Xem thêm: Hướng dẫn cách sửa lỗi msvcr100.dll
Getter và setter
Như đã đề cập, thuộc tính private không thể được truy cập trực tiếp từ bên ngoài mà phải sử dụng các phương thức getter và setter. Getter là phương thức dùng giá trị của thuộc tính, trong khi setter là loại phương thức gán giá trị cho thuộc tính.
Việc sử dụng Setter và Getter là rất quan trọng trong việc kiểm soát những thuộc tính yêu cầu độ chính xác cao của giá trị. Ví dụ ta có thuộc tính age để lưu trữ dữ liệu về tuổi thọ mỗi người. Nếu để phạm vi con số tuổi từ 0 đến 120, thì ta không thể cho chương trình lưu giá trị age này là số âm hoặc lớn hơn 120 được.
Các thuộc tính private được dùng với mục đích không cho người khác tùy ý gán giá trị, và đưa bạn xử lý kết quả trước khi trả về yêu cầu. Getter và setter sẽ giúp việc này được thực hiện. Ví dụ:
<đoạn này cần chèn ví dụ code>
Một điều cần lưu tâm là việc đặt tên cho getter và setter để dễ dàng phân biệt, tránh nhầm lẫn giữa đôi bên.
Định nghĩa phương thức
Về cơ bản, phương thức cũng không khác so với một hàm bình thường. Nó có thể có hoặc không có tham số, không trả về giá trị hoặc có thể override hàm. Với những tham số truyền vào phương thức, cách đầu tiên là đặt tên trùng với thuộc tính class bằng cách kết hợp toán tử :: cùng con trỏ this. Cách thứ 2 là đặt tên khác với thuộc tính (thường là thêm dấu _ đằng trước tên tham số giống thuộc tính private)
Đối với phương thức, có 2 cách chính để định nghĩa thi hành: Định nghĩa thi hành trong lúc định nghĩa class và định nghĩa thi hành ngoài class.
Static member
Còn có tên dịch sang tiếng Việt là thành viên tĩnh, static member trong class C++ nhìn chung cũng tương đối giống với static variable (biến tĩnh) trong function. Nếu như với function, biến tĩnh không mất đi sau khi thực hiện khối lệnh và thoát, thì với class, static member là thuộc tính chung cho tất cả đối tượng thuộc class đó, kể cả khi không tồn tại bất kỳ đối tượng nào. Diễn giải rõ ra, điều này nghĩa là bạn được phép khai báo nhiều object, với mỗi object sở hữu các thuộc tính khác nhau, nhưng chỉ duy nhất một và chỉ một static member tồn tại xuyên suốt 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
Đối tượng và Class trong C++ là gì?
Mục đích chính của ngôn ngữ lập trình Objective-C là thêm hướng đối tượng vào ngôn ngữ lập trình C++ và các class là tính năng chính của Objective-C sẽ hỗ trợ lập trình hướng tới đối tượng và thường được kêu là kiểu do người dùng định nghĩa.
Mảng trong C là gì?
Mảng trong C là một phương pháp gộp nhiều thực thể có cùng một kiểu thành một nhóm. Các thực thể hay phần tử này có thể thuộc kiểu dữ liệu int, float, char hoặc double hoặc có thể thuộc kiểu dữ liệu do người dùng xác định, giống như cấu trúc.
Lời kết
Bài viết trên đây đã giới thiệu đầy đủ cho bạn về khái niệm, cách khai báo và phương thức sử dụng class trong C++. Hy vọng bài viết này của Vietnix sẽ hữu ích cho bạn trong việc tìm hiểu cơ bản về lập trình C++ nhé!
Cảm ơn vì bài viết ạ