Lớp và đối tượng là hai thành phần không thể thiếu trong bất kỳ ngôn ngữ lập trình nào đặc biệt là ngôn ngữ C++. Để tìm hiểu và nắm vững kiến thức liên quan đến chúng, xin mời các bạn dành đôi chút thời gian để tham khảo bài viết sau. Chúng tôi tin rằng những kiến thức liên quan đến lớp và đồi tượng trong C++ sẽ được trình bày cụ thể và tường minh nhất trong phạm vi bài viết này.
Tổng quan về lớp và đối tượng trong C++
Trên thực tế, ngôn ngữ C++ được hỗ trợ và nâng cấp từ ngôn ngữ C. Nói cách khác, tính đối tượng được phát triển trong ngôn ngữ C++ này. Ngoài ra, những lớp class được ví như tính năng chủ đạo trong C++ để trợ giúp người dùng trong việc lập trình hướng đối tượng. Lúc này, họ được xem là người dùng tự định nghĩa.
Bên cạnh đó, lớp có thể dùng để xác định biểu mẫu trên đối tượng và có thể liên kết thông qua hiển thị dữ liệu kèm theo những hàm xử lý dữ liệu vào trong gói (package) nhanh và thuận tiện. Những phương thức ở trong lớp và dữ liệu sẽ được ví như thành viên trong lớp đó.
Định nghĩa lớp trong C++
Ở chuyên mục này chúng tôi sẽ trình bày cách định nghĩa lớp trong C++. Lớp được xem là một cấu trúc dữ liệu vô cùng phức tạp và thực hiện chức năng đóng gói các biến cũng như hàm thành đối tượng cụ thể.
Không những vậy, lớp còn hỗ trợ tính đóng gói nhằm bảo vệ dữ liệu trên đối tượng kèm theo mang đến tính trừu tượng để giúp giấu đi chi tiết quan trọng trên một đối tượng chuyên biệt. Hơn thế nữa, lớp còn giúp tạo ra những lớp mới thông qua việc hỗ trợ kế thừa từ những lớp có sẵn và đa hình phục vụ cho việc xử lý những đối tượng trên những lớp khác nhau thông qua phương pháp đồng nhất.
Ví dụ: Hãy định nghĩa một lớp sau đây.
class Person { private: std::string name; int age; public: void setName(std::string n) { name = n; } std::string getName() { return name; } void setAge(int a) { age = a; } int getAge() { return age; } };
Từ ví dụ trên, lớp ‘Person’ tồn tại hai trường dữ liệu là ‘age’ và ‘name’ kèm theo bốn hàm thành viên ‘setName’, ‘getName’, ‘setAge’, ‘getAge’. Vai trò của phương thức ‘setName’ thường dùng cho việc thiết lặp giá trị trên trường ‘name’.
Bên cạnh đó, phương thức ‘getName’ thực hiện truy xuất giá trị trên trường ‘name’. Còn đối với trường ‘age’, hai hàm ‘setAge’ và ‘getAge’ cũng thực hiện tương tự như vậy. Tiếp đến, ngay khi định nghĩa lớp ‘Person’ thì người dùng hoàn toàn tạo ra những đối trượng từ chính lớp này hay thậm chí tiếp cận đến những phương thức của nó như bên dưới:
Person p; p.setName("John"); p.setAge(30); std::cout << p.getName() << " is " << p.getAge() << " years old." << std::endl;
Kết quả: ‘John is 30 years old’
Làm sao để định nghĩa đối tượng trong C++?
Đối tượng trong C++ được biết đến như thực thể chuyên biệt trên một lớp classs. Thông thường, chúng ta có thể tạo ra đối tượng thông qua từ khóa ‘new’ cũng như khai báo trực tiếp trên một biến thuộc kiểu lớp.
Mặt khác, một đối tượng (object) sẽ chứa những trường dữ liệu cũng như những hàm có thể định nghĩa trên một lớp riêng biệt. Hơn thế nữa, những trường dữ liệu có thể truy xuất từ toán tử dấu chấm (.) và các hàm có thể gọi để tiện cho việc dùng tên đối tượng/tên hàm tương ứng với tham số liên quan.
Ví dụ: Hãy định nghĩa lớp ‘Rectangle’ để tạo ra những đối tượng của hình chữ nhật dưới đây:
class Rectangle { private: float length; float width; public: Rectangle(float l, float w) { length = l; width = w; } float getArea() { return length * width; } };
Các bạn có thể thấy được lớp ‘Rectangle’ sẽ mang đến hai trường dữ liệu là ‘width’ và ‘length’ kèm theo hai hàm là ‘Rectangle’ và ‘getArea’. Lúc này, hàm tạo có thể được dùng để tạo ra giá trị ban đầu trên một đối tượng và hàm ‘getArea’ sẽ thực hiện việc tính diện tích hình chữ nhật tương ứng với kích thước đối tượng (chiều dài/chiều rộng).
Lớp ‘Rectangle’ khi đã định nghĩa xong, người dùng hoàn toàn tự tạo ra những đối tượng từ chính lớp này cũng như dùng những hàm liên quan đến nó như đoạn mã bên dưới:
Rectangle r(4.5, 3.2); std::cout << "Area of the rectangle: " << r.getArea() << std::endl;
Kết quả: ‘Area of the rectangle: 14.4’.
Cách để truy cập những dữ liệu thành viên trong C++
Những dữ liệu thành viên trong một lớp của ngôn ngữ lập trình C++ thường truy cập thông qua việc dùng toán tử dấu chấm (‘.’) hay toán tử dấu mũi tên (‘->’) phù hợp với quá trình dùng một đối tượng hay một con trỏ hướng tới đối tượng.
Nói cách khác, khi bạn dùng toán tử dấu chấm (‘.’), hãy ghi nhớ là truy cập tực những trường dữ liệu trực tiếp hay hàm trên một đối tượng. Khi dùng toán tử có dấu mũi tên (‘->’), chúng ta có quyền truy cập những trường dữ liệu hay hàm trên một đối tượng biểu thị qua con trỏ hướng tới đối tượng đó.
Ví dụ: Các bạn hãy định nghĩa lớp ‘Person’ như bên dưới:
class Person { private: std::string name; int age; public: void setName(std::string n) { name = n; } std::string getName() { return name; } void setAge(int a) { age = a; } int getAge() { return age; } };
Kế tiếp, cùng nhau tạo một đối tượng ‘p’ từ chính lớp ‘Person’ cũng như truy cập những trường dữ liệu và hàm trên đối tượng này.
Person p; p.setName("John"); p.setAge(30); std::cout << p.getName() << " is " << p.getAge() << " years old." << std::endl;
Kết quả: ‘John is 30 years old.’
Khi người dùng mong muốn dùng một con trỏ hướng tới đối tượng ‘p’ thì hoàn toàn có thể dùng lệnh sau:
Person *ptr = &p;
Cuối cùng, hãy truy cập những trường dữ liệu cũng như hàm trên đối tượng ‘p’ qua con trỏ ‘ptr’.
ptr->setName("Alice"); ptr->setAge(25); std::cout << ptr->getName() << " is " << ptr->getAge() << " years old." << std::endl;
Kết quả: ‘Alice is 25 years old.’
Những dạng phạm vi truy cập trong C++
Có tổng cộng ba dạng phạm vi truy cập cho những thành viên trong ngôn ngữ C++ trên một lớp:
1. ‘Private’: Những thành viên có thể khai báo trên phạm vi ‘private’ thì có thể dùng từ phía trong một lớp. Chúng ta có thể hiểu là những thành viên sẽ được truy cập thông qua những hàm khác nhau trên lớp đó và không hỗ trợ truy cập từ bên ngoài lớp. Nói tóm lại, phạm vi này có thể truy cập cho những thành viên trong một lớp mặc định.
2. ‘Public’: Những thành viên sẽ khai báo ở phạm vi ‘Public’ thường có thể truy cập ở bất kỳ chỗ nào ở trong dự án thậm chí bên ngoài lớp đó.
3. ‘Protected’: Những thành viên có thể khai báo trong phạm vi ‘protected’ và thậm chí được truy cập ở bên trong cùng một lớp cũng như những lớp kế thừa từ lớp đó. Những thành viên trong phạm vi sẽ không được phép truy cập từ bên ngoài những lớp kế thừa hay ngoài lớp đó.
Mặt khác, quá trình dùng những phạm vi truy cập để hỗ trợ kiểm soát truy cập cho những thành viên trên một lớp và tầng tính bảo mật trong dự án.
Ví dụ:
class Rectangle { private: double length; double width; public: void setLength(double len) { length = len; } void setWidth(double wid) { width = wid; } double getArea() { return length * width; } }; int main() { Rectangle rect; rect.setLength(5.0); // access private member rect.setWidth(3.0); // access private member std::cout << "Area of rectangle: " << rect.getArea() << std::endl; return 0; }
Những thành viên như ‘length’ và ‘width’ sẽ được khai báo trong phạm vi ‘private’. Do đó, những thành viên này sẽ chỉ được truy cập thông qua những phương thức khác trên lớp ‘Rectangle’. Tiếp theo, khi xét đến phương thức ‘main()’ thì chúng ta hãy dùng những hàm ‘setLength()’ kèm theo ‘setWidth()’ nhằm tạo giá trị cho ‘length’ và ‘width.
Sau đó, hãy dùng hàm ‘getArea()’ để thực hiện việc tính diện tích hình chữ nhật. Hãy chú ý một điều là người dùng không thể dùng trực tiếp những thành viên ‘length’ hay ‘width’ từ phương thức ‘main()’. Lúc này, chúng nằm ở phạm vi ‘Private’.
Sơ lược về hàm thành viên trong lớp
Sau đây, chúng ta hãy cùng nhau tìm hiểu về hàm thành viên trong lớp trong C++. Nói cách khác, hàm thành viên trong lớp là những hàm có thể định nghĩa và thực hiện trong phạm vi của chính lớp đó. Lúc này, chúng sẽ truy cập những thành viên trên lớp và thậm chí gọi từ bên ngoài lớp qua một đối tượng trên lớp này.
Bên cạnh đó, người dùng phải sử dụng tên hàm trên phạm vi của lớp hay thực thi cú pháp bên dưới để định nghĩa một hàm thành viên.
class MyClass { public: void myFunction() { // code here } };
Có thể thấy được ‘myFunction()’ chính là tên của hàm thành viên. Lúc này, người dùng hãy truy cập và tiếp cận đến những thành viên khác trên lớp ‘MyClass’.
Ví dụ:
class Rectangle { private: double length; double width; public: void setLength(double len) { length = len; } void setWidth(double wid) { width = wid; } double getArea() { return length * width; } }; int main() { Rectangle rect; rect.setLength(5.0); // call member function rect.setWidth(3.0); // call member function std::cout << "Area of rectangle: " << rect.getArea() << std::endl; // call member function return 0; }
Người dùng đã định nghĩa cả ba hàm thành viên trên cùng một lớp ‘Rectangle’ nhằm thiết lập giá trị ‘width’ và ‘length’ cũng như sau đó là tính diện tích hình chữ nhật. Nói cách khác, những hàm thành viên này sẽ được gọi thông qua một đối tượng ‘Rectangle’ phù hợp và khai thác chúng để xử lý trên chính đối tượng đó.
Kết
Tất cả những kiến thức liên quan đến lớp và đối tượng trong C++ đã được trình bày cặn kẽ và chi tiết nhất trong bài viết này. Chúng tôi hy vọng sẽ tiếp thu những phản hồi tích cực từ phía đọc giả để hoàn thiện những thiếu sót của mình trong tương lai.