Danh mục

Các lớp

Số trang: 10      Loại file: pdf      Dung lượng: 267.39 KB      Lượt xem: 9      Lượt tải: 0    
10.10.2023

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Các lớpLớp là một phương thức logic để tổ chức dữ liệu và các hàm trong cùng một cấu trúc. Chúng được khai báo sử dụng từ khoá class, từ này có chức năng tương tự với từ khoá của C struct nhưng có khả năng gộp thêm các hàm thành viên. Dạng thức của nó như sau: class class_name { permission_label_1: member1; permission_label_2: member2; ... } object_name; trong đó class_name là tên của lớp ( kiểu người dùng tự định nghĩa) và trường mặc định object_name là một hay một vài tên đối tượng hợp lệ. Phần thân của...
Nội dung trích xuất từ tài liệu:
Các lớp Các lớpLớp là một phương thức logic để tổ chức dữ liệu và các hàm trong cùng một cấutrúc. Chúng được khai báo sử dụng từ khoá class, từ này có chức năng tương tựvới từ khoá của C struct nhưng có khả năng gộp thêm các hàm thành viên.Dạng thức của nó như sau:class class_name { permission_label_1: member1; permission_label_2: member2; ... } object_name;trong đó class_name là tên của lớp ( kiểu người dùng tự định nghĩa) và trườngmặc định object_name là một hay một vài tên đối tượng hợp lệ. Phần thân củakhai báo chứa các thành viên của lớp, đó có thể là dữ liệu hay các hàm và có thểlà các nhãn cho phép ( permission labels) là một trong những từ khoá sauđây: private:, public: hoặc protected:. • Các thành viên private của một lớp chỉ có thể được truy xuất từ các thành viên khác của lớp hoặc từ các lớp bạn bè. • Các thành viên protected có thể được truy xuất từ các thành viên trong cùng một lớp và các lớp bạn bè, thêm vào đó là từ các thành viên của các lớp thừa kế • Cuối cùng, các thành viên public có thể được truy xuất từ bất kì chỗ nào mà lớp nhìn thấy.Nếu chúng ta khai báo các thành viên của một lớp trước khi thêm vào các nhãncho phép thì các thành viên đó được coi là private.Ví dụ:class CRectangle { int x, y; public: void set_values (int,int); int area (void); } rect;Khai báo lớp CRectangle và một đối tượng có tên rect có kiểu là lớpCRectangle. Lớp này chứa bốn thành viên: hai viến có kiểu int (x và y) trongphần private (vì private là sự cho phép mặc định) và hai hàm trong phầnpublic: set_values() và area(), ở đây chúng ta chỉ mới khai báo mẫu.Hãy chú ý sự khác biệt giữa tên lớp và tên đối đối tượng: Trong ví dụ trước,CRectangle là tên lớp còn rect là tên một đối tượng có kiểu CRectangle.Trong các phần tiếp theo của chương trình chúng ta có thể truy xuất đến các thànhviên public của đối tượng rect như là đối với các hàm hay các biến thông thườngbằng cách đặt tên của đối tượng rồi sau đó là một dấu chấm và tên thành viên củalớp (như chúng ta đã làm với các cấu trúc của C). Ví dụ:rect.set_value (3,4);myarea = rect.area();nhưng chúng ta không có khả năng truy xuất đến x hay y vì chúng là các thànhviên private của lớp và chúng chỉ có thể được truy xuất từ các thành viên của cùngmột lớp. Bối rối? Đây là ví dụ đầy đủ về lớp CRectangle:// classes example area: 12#include class CRectangle { int x, y; public: void set_values(int,int); int area (void){return (x*y);}};voidCRectangle::set_values(int a, int b) { x = a; y = b;}int main () { CRectangle rect; rect.set_values (3,4); cout rect.area();}Một điều mới trong đoạn mã này là toán tử phạm vi :: được dùng trong khai báoset_values(). Nó được sử dụng để khai báo ở bên ngoài các thành viên củamột lớp. Chú ý rằng chúng ta đã định nghĩa đầy đủ hàm area() ngay bên tronglớp trong khi hàm set_values() mới chỉ được khai báo mẫu còn định nghĩacủa nó nằm ở ngoài lớp. Trong phần khai báo ở ngoài này chúng ta bắt buộc phảidùng toán tử ::.Sự khác biệt duy nhất giữa việc khai báo đầy đủ một hàm bên trong lớp và việc chỉkhai báo mẫu là trong trường hợp thứ nhất hàm sẽ được tự động coi là inline bởitrình dịch, còn trong trường hợp thứ hai nó sẽ là một hàm thành viên bình thường.Lý do khiến chúng ta khai báo x và y là các thành viên private vì chúng ta đãđịnh nghĩa một hàm để thâótc với chúng (set_values()) và không có lý do gìđể truy nhập trực tiếp đến các biến này. Có lẽ trong ví dụ rất đơn giản này bạnkhông thấy được một tiện ích lớn khi bảo vệ hai biến này nhưng trong các dự ánlớn hơn nó có thể là rất quan trọng khi đảm bảo được rằng các giá trị đó không bịthay đổi một cách không mong muốn.Một ích lợi nữa của lớp là chúng ta có thể khai báo một vài đối tượng khác nhau từnó. Ví dụ, tiếp sau đây là ví dụ trước về lớp CRectangle, tôi chỉ thêm phần khaibáo thêm đối tượng rectb.// class example rect area: 12#include rectb area: 30class CRectangle { int x, y; public: void set_values(int,int); int area (void){return (x*y);}};voidCRectangle::set_values(int a, int b) { x = a; y = b;}int main () { CRectangle rect, rectb; rect.set_values (3,4); rectb.set_values (5,6); cout CRectangle (int,int); int area (void){return (width*height);}};CRectangle::CRectangle(int a, int b) { width = a; height = b;}int main () { CRectangle rect (3,4); CRectangle rectb (5,6); cout Destructor đặc biệt phù hợp khi mà một đối tượng cấp phát bộ nhớ động trong quátrình tồn tại của nó và trong thời điểm bị huỷ bỏ chúng ta muốn giải phóng bộ nhớmà nó sử dụng.// example on constructors rect area: 12and destructors rectb area: 30#include class CRectangle { int *w ...

Tài liệu được xem nhiều: