560 likes | 682 Views
CH ƯƠNG 2: ĐỐI T ƯỢNG V À L ỚP Kh ái ni ệm v ề đóng g ói dữ li ệu Khai b áo v à s ử d ụng m ột l ớp Khai b áo v à s ử d ụng đối t ượng , con tr ỏ đối t ượng , tham chi ếu đối t ượng H àm thi ết l ập v à h àm hu ỷ b ỏ
E N D
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • Khái niệm vềđóng gói dữ liệu • Khai báo và sử dụng một lớp • Khai báo và sử dụngđối tượng, con trỏđối tượng, tham chiếuđối tượng • Hàm thiết lập và hàm huỷ bỏ • Khai báo và sử dụng hàm thiết lập sao chép • Vai trò của hàm thiết lập ngầmđịnh
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP ĐỐI TƯỢNG Ví dụ mô tả một đối tượng điểm { //dữ liệu int x,y; //phuong thuc void init(int ox,int oy); void move(int dx,int dy); void display(); }; Đóng gói là cơ chế liên kết các lệnh thao tác và dữ liệu có liên quan giứp cho cả hai được an toàn tránh sự can thiệp từ bên ngoài và việc sử dụng sai. Đối tượng = dữ liệu + phương thức
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • ĐỐI TƯỢNG • Lời gọi đến một phương thức là truyền một thông báo đến cho đối tượng • Các thông điệp gởi tới đối tượng nào sẽ gắn chặt với đối tượng đó • Trong C++, khi cài đặt đối tượng cho phép che dấu một bộ phận dữ liệu của đối tượng và mở rộng khả năng truy nhập đến các thành phân riêng của đối tượng
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP 2. LỚP • Lớp là một mô tả trừu tượng của nhóm của các đối tượng có cùng bản chất • Một đối tượng là một thể hiện cụ thể của lớp 2.1 Khai báo lớp • class <tên lớp> { • private: • <khai báo các thành phần riêng trong từng đối tượng> • public: • <khai báo các thành phần công cộng của từng đối tượng> • }; • <định nghĩa các hàm thành phần> • ...
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.1 Khai báo lớp
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.1 Khai báo lớp
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 2. LỚP 2.1 Khai báo lớp • Có thể định nghĩa trực tiếp các hàm thành phần bên trong khai báo lớp • Khi định nghĩa hàm thành phần bên ngoài khai báo lớp ta sử dụng cú pháp • <tên kiểu trả về><tên lớp>::<tên hàm>(<danh sách tham số>) • { <nội dung>} • Gọi hàm thành phần từ đối tượng của một lớp chính là truyền thông điệp cho hàm hàm thành phần đó, cú pháp • <tên đối tượng>.<tên hàm thành phần>(<danh sách các tham số nếu có>)
Khung DL Phương thức Lớp Đối tượng Đốitượng Dữ liệu cụ thể 1 Tham chiếu phương thức Dữ liệu cụ thể2 Tham chiếu phương thức Đối tượng là một thể hiện của lớp CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.1.1 Tạo đối tượng Tạo đối tượng <tên lớp> <tên đối tượng>; 2.1.2 Các thành phần dữ liệu Khai báo các thành phần dữ liệu giống khai báo biến <tên biến> <tên thành phần>;
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.1.3 Các hàm thành phần
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.1.3 Các hàm thành phần
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.1.3 Các hàm thành phần Có thể đặt định hàm thành phần trong cùng tập tin khai báo lớp hoặc trong một tập tin khác
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.1.3 Các hàm thành phần Có thể đặt định hàm thành phần trong cùng tập tin khai báo lớp hoặc trong một tập tin khác
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 2. LỚP 2.1.4 Phạm vi lớp Tất cả các thành phần của lớp sẽ được coi là thuộc phạm vi lớp, trong định nghĩa hàm thành phần của lớp có thể tham khảo đến bất kỳ một thành phần nào khác của lớp đó • 2.1.5 Từ khoá xác định phạm vi lớp • Những thành phần được liệt kê trong phần private chỉ được truy xuất bên trong phạm vi lớp • Những thành phần được liệu kê trong phần public có thể truy xuất từ bên ngoài vào
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 2. LỚP 2.1.5 Từ khoá xác định phạm vi lớp • Khi khai báo nên sắp xếp các thành phần private lên trên, các thành phần public ở phía dưới • Khi khai báo có thể bỏ nhãn private đi vì C++ hiểu rằng các thành phần nằm trước public là private
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 2. LỚP • Lưu ý: • Nếu tất cả các thành phần của lớp là public, lớp sẽ tương đương với struct • Ngoài public và private, còn có từ khoá protected, trong phạm vì lớp hiện tại một thành phần protected có tính chất giống như thành phần private
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.2 Khả năng của các hàm thành phần 2.2.1 Định nghĩa chồng các hàm thành phần Các hàm thành phần có thể trùng tên nhưng phải khác nhau kiểu giá trị trả về, danh sách kiểu các tham số
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.2 Khả năng của các hàm thành phần 2.2.1 Định nghĩa chồng các hàm thành phần
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 2. LỚP 2.2 Khả năng của các hàm thành phần 2.2.2 Các tham số với giá trị ngầm định
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 2. LỚP 2.2 Khả năng của các hàm thành phần 2.2.3 Sử dụng đối tượng làm tham số của hàm thành phần • Hàm thành phần có quyền truy xuất tới thành phần private của các đối tượng, tham chiếu đối tượng hay con trỏ đối tượng có cùng kiểu lớp khi được dùng là tham số hình thức
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 2. LỚP 2.2 Khả năng của các hàm thành phần 2.2.4 Con trỏ this • Con trỏ this tham chiếu đến đối tượng đang gọi hàm thành phần -> có thể truy xuất đến các thành phần của đối tượng gọi hàm thành phần gián tiếp thông qua this
5 2 a b x x 5 y 2 y • CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 3. PHÉP GÁN ĐỐI TƯỢNG • Có thể gán 2 đối tượng cùng kiểu • Ví dụ: • point a, b; • a.init(5,2); • b=a;
5 2 a b x x 5 y y 2 z z Vùng dữ liệu động • CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 3. PHÉP GÁN ĐỐI TƯỢNG • Khi các đối tượng có chứa thành phần dữ liệu động
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • Ví dụ xây dựng lớp • Xây dựng lớp nhân viên có các thuộc tính sau: Tên, năm sinh, điạ chỉ, số điện thoại, email, ngày vào làm việc, hệ số lương, số ngày nghỉ • Các phương thức đối với nhân viên: tăng hệ số lương, đổi số điện thoại, xin nghỉ phép. • Thực hiện quản lý một công ty có 10 nhân viên. • In ra danh sách tên, năm sinh và địa chỉ các nhân viên trong công ty. • …
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.1 Hàm thiết lập • Là một hàm đặc biệt trong lớp và nó được gọi tự động khi có một đối tượng được khai báo. • Hàm thiết lập khởi tạo các giá trị thành phần dữ liệu của đối tượng, xin cấp phát bộ nhớ cho các thành phần dữ liệu động
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.1 Hàm thiết lập
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.1 Hàm thiết lập • Đặc điểm của hàm thiết lập • Hàm thiết lập có tên trùng với tên lớp • Hàm thiết lập phải có thuộc tính public • Hàm thiết lập không có giá trị trả về, không cần khai báo void • Có thể có nhiều hàm thiết lập trong cùng một lớp • Khi tạo đối tượng từ một lớp có nhiều hàm thiết lập thì các tham số truyền phải phù hợp với một trong các hàm thiết lập
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.1.1 Hàm thiết lập ngầm định • Hàm thiết lập ngầm định khi trong khai báo lớp không có hàm thiết lập
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.1.1 Hàm thiết lập ngầm định
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.1.1 Hàm thiết lập ngầm định • Giải quyết trường hợp lỗi
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.1.2 Con trỏ đối tượng • Ví dụ: • point *ptr; • ptr = &a; • ptr->display(); • ptr->move(-2,3); • - Dùng toán tử new • ptr = new point(3,2); // cấp phát phát một đối tượng động, ptr trỏ đến đối tượng này • ptr->display();
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ 4.1.2 Con trỏ đối tượng
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ 4.1.2 Con trỏ đối tượng
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ 4.1. 3 Tham chiếu đối tượng
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • Ví dụ xây dựng lớp • Xây dựng lớp hàng hóa có các thuộc tính sau: Tên hàng, mã hàng, nhãn hiệu, giá bán, giá mua, số lượng • Các phương thức đối với hàng hóa: nhập hàng, bán hàng, tăng giá, giám giá. • Thực hiện quản lý các mặt hàng: dầu ăn, bia, nước ngọt. • In ra danh các mặt hàng. • …
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ 4.2 Hàm huỷ bỏ Hàm huỷ bỏ được gọi khi đối tượng bị xoá đi khỏi bộ nhớ
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.2 Hàm huỷ bỏ • Một số qui định đối với hàm huỷ bỏ • Tên của hàm huỷ bỏ bắt đầu bằng dấu ~ và theo sau là tên lớp • Hàm huỷ bỏ phải có thuộc tính public • Hàm thiết lập không có tham số, trong một lớp chỉ có một hàm thiết lập • Khi không định nghĩa hàm huỷ bỏ, chương trình dịch tự động sinh một hàm huỷ bỏ ngầm định, đối với các lớp không có khai báo các thành phần bộ nhớ động thì có thể dùng hàm huỷ bỏ ngầm định, ngược lại nên có hàm huỷ bỏ tường minh • Hàm huỷ bỏ không có giá trị trả về
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.3 Hàm thiết lập sao chép • Với biến nguyên • int p; • Int x=p; • Với đối tượng: dùng hàm thiết lập sao chép • point p(2,3); • point q=p;// khởi tạo đối tượng và sao chép nội dung từ một đối tượng đã có sang đối tượng mới tạo • Dùng phép gán đối tượng • point p(2,3);//Lớp point có hàm thiết lập hai tham số • point q;// Lớp point có hàm thiết lập không tham số • q = p; // phép gán 2 đối tượng
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.4 Hàm thiết lập sao chép ngầm định • Nếu không được mô tả tường minh, trong khai báo của một lớp có ít nhất hai hàm thiết lập ngầm định: hàm thiết lập ngầm định và hàm thiết lập sao chép ngầm định • Với các lớp không có khai báo thành phần dữ liệu động thì chỉ cần dùng các hàm thiết lập ngầm định
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ • 4.4 Khai báo và định nghĩa hàm thiết lập sao chép tường minh • Câu lệnh point q=p; tương đương point q(p); • Dạng khai báo của hàm thiết lập là: point (point &); hoặc point(const point &);
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ 4.2 Khai báo và định nghĩa hàm thiết lập sao chép tường minh
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 4. HÀM THIẾT LẬP VÀ HÀM HUỶ BỎ 4.2 Khai báo và định nghĩa hàm thiết lập sao chép tường minh
a.n b.n b.x b.n a.n a.x b.x a.x Object a Object bb CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 5. CÁC THÀNH PHẦN TĨNH 5.1 Thành phần dữ liệu static class exple1 { int n; float x; .... }; Khai báo explel a,b; sẽ tạo ra hai đối tượng a,b riêng biệt class exple2 { static int n; float x; .... }; Khai báo explel a,b; sẽ tạo ra hai đối tượng a,b có chung n
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 5. CÁC THÀNH PHẦN TĨNH • 5.1 Thành phần dữ liệu static • Các thành phần dữ liệu tĩnh static chỉ có một phiên bản trong tất cả các đối tượng, không thể khởi tạo chúng bằng các hàm thiết lập của một lớp, không thể khởi tạo lúc khai báo • Ví dụ: • Class exple2 • { • static int n=2; // lỗi • }; • Thành phần dữ liệu tĩnh static phải được khởi tạo một cách tường minh bên ngoài khai báo lớp • Int exple2::n=5; • Thành phần dữ liệu tĩnh có thể là private hoặc public
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 5. CÁC THÀNH PHẦN TĨNH 5.1 Thành phần dữ liệu static
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 5. CÁC THÀNH PHẦN TĨNH • 5.2 Các hàm thành phần static • Hàm thành phần tĩnh static không có tham số ngầm định • Hàm thành phần tĩnh của một lớp có thể gọi cho dù chưa có khai báo các đối tượng của lớp đó • Thông thường các hàm thành phần tĩnh static được dùng để xử lý chung trên tất cả các đối tượng của lớp
CHƯƠNG 2: ĐỐI TƯỢNG VÀ LỚP 5. CÁC THÀNH PHẦN TĨNH 5.2 Các hàm thành phần static
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 7. HÀM BẠN VÀ LỚP BẠN • C++ cho phép bên ngoài truy cập tới thành phần private của lớp dựa trên khái niệm “hàm bạn” • Có nhiều kiểu bạn bè • Hàm tự do là bạn của một lớp • Hàm thành phần của một lớp là bạn của một lớp khác • Hàm bạn của nhiều lớp • Tất cả các hàm thành phần của một lớp là bạn của một lớp khác
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 7. HÀM BẠN VÀ LỚP BẠN • 7.1 Hàm tự do là bạn của một lớp
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 7. HÀM BẠN VÀ LỚP BẠN • 7.2 Hàm thành phần của một lớp là bạn của lớp khác • A, B là hai lớp • int f(char, A); là một hàm trong lớp B • Nếu f có nhu cầu truy xuất vào các thành phần riêng của A thì f cần được khai báo là bạn của A trong lớp A như sau • friend int B::f(char, A);
CHƯƠNG 2: • ĐỐI TƯỢNG VÀ LỚP • 7. HÀM BẠN VÀ LỚP BẠN • 7.2 Hàm thành phần của một lớp là bạn của lớp khác