Bài giảng chương 3: Lớp và đối tượng

a. Khaibáo class { [quyềntruyxuất:] //khaibáocácthànhphầndữliệucủalớp [quyềntruyxuất:] //khaibáocácthànhphầnhàmcủalớp };

pdf51 trang | Chia sẻ: mamamia | Lượt xem: 1854 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng chương 3: Lớp và đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
3/7/2014 8:40 πμ 1 Hà Văn Sang Bộ môn: Tin học TC – KT Khoa: Hệ Thống Thông Tin Kinh tế - Học Viện Tài Chính Tel: 0982.165.568 Email: sanghv@hvtc.edu.vn Website: Lập trình hướng đối tượng 3/7/2014 8:40 πμ 2 CHƯƠNG III 3/20 1. Xây dựng lớp và đối tượng a. Khai báo class { [quyền truy xuất:] //khai báo các thành phần dữ liệu của lớp [quyền truy xuất:] //khai báo các thành phần hàm của lớp }; 4/20 a. Khai báo Trong đó: :  do người dùng đặt  tuân theo các qui tắc về tên Ví dụ: SV, NGUOI, Hoa_Don, ps, Ma_Tran… 5/20 a. Khai báo [quyền truy xuất:]  Là khả năng truy xuất thành phần dữ liệu  Ngầm định là private priate: trong phạm vi lớp đó public: ở mọi nơi nếu đối tượng tồn tại protected: phạm vi lớp đó và các lớp con kế thừa 6/20 a. Khai báo Thành phần của lớp  Có thể gồm: Dữ liệu Thuộc tính Phương thức 7/20 a. Khai báo Khai báo thành phần  Dữ liệu: Tương tự như khai báo biến ; Chú ý: không được khởi tạo giá trị ban đầu 8/20 a. Khai báo Khai báo thành phần  Hàm thành phần Cách 1: Khai báo trong lớp và định nghĩa ngoài lớp tênlớp::([đối sô]) { // } Cách 2: định nghĩa ngay trong lớp 9/20 a. Khai báo Ví dụ 1: Xây dựng cấu trúc dữ liệu mô tả sinh viên: Dữ liệu: họ tên, ngày sinh, giới tính, Điểm toán, lý, hóa, Đtb Phương thức: nhập, tính đtb, in  Lớp sinh viên 10/20 a. Khai báo Ví dụ 2: Xây dựng cấu trúc dữ liệu mô tả các hóa đơn: Dữ liệu: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng, đơn giá, thành tiền… Phương thức: nhập, tính thành tiền, in  Lớp các hóa đơn 11/20 a. Khai báo Ví dụ 3: Xây dựng cấu trúc dữ liệu mô tả các phân số: Dữ liệu: tử số, mẫu số Phương thức: nhập, tối giản, in  Lớp các phân số 12/20 b. Khai báo đối tượng Cú pháp: ; Ví dụ: khai báo 2 đối tượng sinh viên SV sv1, sv2; Khi đó sv1, sv2 là hai đối tượng sinh viên 13/20 c. Truy xuất thành phần Dữ liệu .; Ví dụ: truy xuất họ tên và ngày sinh của sv sv1.ht; sv2.ns; Nếu là con trỏ: ->; 14/20 c. Truy xuất thành phần Thành phần hàm .([ds đối số]); Ví dụ: truy xuất phương thức nhập và in của sv sv1.nhap(); sv2.in(); Với con trỏ: ->.([đối số]); 15/20 2. Các phương thức Một đối tượng thường có 4 kiểu hành vi cơ bản Các phương thức khởi tạo: Constructor Các phương thức truy vấn: Queries Các phương thức cập nhập: Updates Các phương thức hủy: Destructor 16/20 a. Hàm khởi tạo Khai báo: ([ds tham số]); Định nghĩa ngoài lớp: ::([ds tham số]) { //thân hàm } 17/20 a. Hàm khởi tạo (tiếp) Như vậy hàm khởi tạo: Có với mọi lớp Tên hàm giống tên lớp Không có kiểu nên không cần khai báo Không có giá trị trả về Nếu không xây dựng thì chương trình tự động sinh hàm khởi tạo mặc định Được gọi tự động khi khai báo thể hiện của lớp 18/20 a. Hàm khởi tạo (tiếp) Một số hàm khởi tạo: - Hàm khởi tạo mặc định (default constructor) - Hàm khởi tạo sao chép (copy constructor) Khai báo: (const &) Đối tượng mới sẽ là bản sao của đối tượng đã có 19/20 b. Hàm hủy - Destructor Khai báo: ~(); Chức năng: - Hủy bỏ, giải phóng các đối tượng khi nó hết phạm vi tồn tại 20/20 b. Hàm hủy (tiếp) Như vậy hàm hủy: Không có đối số Không có giá trị trả về Không định nghĩa lại Trùng tên với lớp và có dấu ~ ở trước Thực hiện một số công việc trứơc khi hệ thống giải phóng bộ nhớ Chương trình dịch tự động sinh hàm hủy mặc định 21/20 3. Nạp chồng toán tử Cú pháp: operator([ds tham số]) Định nghĩa ngoài lớp: ::operator([ds tham số]) { //thân hàm } 22/20 3. Nạp chồng toán tử (tiếp) Ví dụ: Nạp chồng toán tử +, * của lớp phân số Nạp chồng toán tử + vector Danh sách các toán tử có thể nạp chồng: + - * / = += -= *= /= > >= == != = ++ -- % & ^ ! | ~ &= ^= |= && || %= [] () , ->* -> new delete new[] delete[] 23/20 3. Nạp chồng toán tử (tiếp) Chú ý: Chỉ có thể định nghia lại các toán tử ở trên Không làm thay đổi độ ưu tiên của các toán tử Với toán tử 2 ngôi: toán tử bên trái là ẩn toán tử bên phải là đối số Do đó: số tham số bằng số toán hạng - 1 24/20 3. Nạp chồng toán tử (tiếp) Cách gọi hàm toán tử: Dùng như cú pháp thông thường của phép toán Ví dụ: PS a,b,c; c=a+b; Dùng như hàm thành phần của đối tượng Ví dụ: PS a,b,c; c=a.operator+(b); 25/20 Bài tập (week 4) • Nạp chồng các toán tử của các bài tập trong tuần 3 26/20 Bài tập (week 3) • Sử dụng TC++ để lập trình: 1. Xây dựng lớp phân số gồm các thành phần: -DL: tử số, mẫu số -Pt: nhập, in, tối giản, so sánh 2 ps Hàm main: -Nhập mảng có n phân số (n<=10) -Sắp xếp mảng PS theo thứ tự giảm dần -In mảng sau khi xếp 27/20 Bài tập (week 3) • Sử dụng TC++ để lập trình: 2. Xây dựng lớp số phức gồm các thành phần: -DL: phần thực, phần ảo -Pt: nhập, in, tính , nhân, chia 2 số phức Hàm main: -Nhập 2 số phức -Tính và in tổng, hiệu hai số phức -In mảng sau khi xếp papt 22  28/20 Bài tập (week 3) • Sử dụng TC++ để lập trình: 3. Xây dựng lớp vectơ gồm các thành phần: -DL: số phần tử, mảng các phần tử -Pt: nhập, in, tổng 2 vectơ, tích vô hướng Hàm main: -Nhập 2 vectơ -Tính và in tổng a+b 29/20 Bài tập (week 3) • Sử dụng TC++ để lập trình: 4. Xây dựng lớp ma trận gồm các thành phần: -DL: số dòng, số cột, mảng các phần tử -Pt: nhập, in, kiểm tra ma trận có là đơn vị không Hàm main: -Nhập ma trận a -Thông báo có là ma trận đơn vị không -In ma trận 30/20 Bài tập (week 3) • Sử dụng TC++ để lập trình: 5. Xây dựng lớp sinh viên gồm các thành phần: -DL: họ tên, ngày sinh, giới tính, lớp (k43/41.01),điểm toán, lý, hóa, đtb -Pt: nhập, in, tính điểm trung bình Hàm main: -Nhập danh sách sinh viên -Sắp xếp theo điểm trung bình giảm dần -In danh sách sau khi xếp 31/20 Bài tập (week 3) • Sử dụng TC++ để lập trình: 6. Xây dựng lớp hóa đơn gồm các thành phần: -DL: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng, đơn giá, thành tiền -Pt: nhập, in, kiểm tra phiếu nhập hay xuất Hàm main: -Nhập danh sách hóa đơn -Tính thành tiền cho các hóa đơn và in tổng thành tiền -In danh sách sau khi xếp theo số tiền giảm dần 32/20 Qui cách nộp bài Gửi tới địa chỉ: sanghv@gmail.com CC: sanghv@hvtc.edu.vn Tiêu đề: [Lớp][BT3][Stt][Họ và tên] Ví dụ: [K43/41.01][BT3][14][Lê hoàng Vũ] Hạn nộp: 23h59’ ngày 29/01/2008 3/7/2014 8:39 πμ 1 Hà Văn Sang Bộ môn: Tin học TC – KT Khoa: Hệ Thống Thông Tin Kinh tế - Học Viện Tài Chính Tel: 0982.165.568 Email: sanghv@hvtc.edu.vn Website: Lập trình hướng đối tượng 3/7/2014 8:39 πμ 2 CHƯƠNG III 3/20 4. Mảng và con trỏ của đối tượng Khai báo [spt]; Ví dụ: SV sinhvien[50]; PS a[8]; *; Ví dụ: SV *p = sinhvien; 4/20 5. Hàm bạn và lớp bạn Khái niệm hàm bạn:  Hàm bạn của một lớp là hàm không phải là thành phần của lớp  Nhưng có khả năng truy xuất đến mọi thành phần của đối tượng Cú pháp: friend (tham số); Sau đó định nghĩa hàm ở ngoài lớp như các hàm tự do khác 5/20 5. Hàm bạn và lớp bạn (tiếp) Ví dụ:  Xây dựng lớp PS với phép toán: +, -, toán tử nhập (>>), toán tử xuất (<<) Toán tử >>, << đã được xây dựng với các kiểu dữ liệu chuẩn như int, char, float … Với các kiểu dữ liệu mới ta phải xây dựng lại: istream& operator>>(istream& is, PS &x); Trả về bộ nhớ đệm Phải thay đổi để phù hợp Giá trị có thể thay đổi 6/20 5. Hàm bạn và lớp bạn (tiếp) Nhận xét  Hàm bạn không phải là hàm thành viên nên không bị ảnh hưởng của từ khoá truy xuất  Không hạn chế số lượng hàm bạn  Hàm bạn của một lớp có thể là hàm tự do  Hàm bạn của một lớp có thể là hàm thành phần của một lớp khác 7/20 5. Hàm bạn và lớp bạn (tiếp) Khái niệm lớp bạn:  Lớp A là lớp bạn của lớp B nếu trong B có chứa khai báo: friend class A; Vậy: Nếu A là lớp bạn của B thì mọi hàm thành phần của A sẽ trở thành hàm bạn của B 8/20 6. Thành phần tĩnh a. Dữ liệu tĩnh Khái niệm: Là thành phần dữ liệu của lớp nhưng không gắn cụ thể với đối tượng nào Dùng chung cho toàn bộ lớp Các đối tượng của lớp đều dùng chung thành phần tĩnh này 9/20 6. Thành phần tĩnh a. Dữ liệu tĩnh Khai báo: static ; Ví dụ: class PS{ int ts, ms; static int count; public: PS(int m=0, int n=1){ ts=t; ms=m; count++;} }; 10/20 6. Thành phần tĩnh a. Dữ liệu tĩnh Truy xuất: Theo đối tượng (cách thông thường) Ví dụ: PS a; a.count=0; Theo lớp Ví dụ: PS::count=0; 11/20 6. Thành phần tĩnh a. Dữ liệu tĩnh Chú ý:  Tồn tại ngay khi chưa có đối tượng nào Phải được khởi tạo trước khi đối tượng phát sinh Phải khởi tạo ngoài mọi hàm theo cú pháp: :: = ; Ví dụ: int PS::count=0; 12/20 Ví dụ: • Xây dựng lớp Hóa đơn có một thành phần dữ liệu tĩnh để kiểm soát số đối tượng HĐ được cấp phát. 13/20 6. Thành phần tĩnh b. Phương thức tĩnh Khái niệm:  là hàm thành phần của lớp nhưng không gắn với đối tượng cụ thể nào Dùng để thao tác chung cho lớp Trong thân hàm không có đối tượng ẩn static (tham số); Ví dụ: xây dựng lớp SV gồm pt nhập, in 1 sinh viên. Nhập, in danh sách sinh viên. 14/20 7. Thành phần hằng a. Dữ liệu hằng Khái niệm:  là thành phần dữ liệu của lớp nhưng không thay đổi giá trị trong quá trình tồn tại Ví dụ: Với lớp nhân sự thì số CMT là tp hằng Khai báo: const ; Thành phần hằng không thể thay đối sau khi đối tượng được hình thành 15/20 7. Thành phần hằng a. Dữ liệu hằng Xác định giá trị:  ở hàm khởi tạo Ví dụ: NS(int k=0):scmt(k){…} Cú pháp ([ds tham số]):(đối số) ,(đối số) …. { //thân hàm khởi tạo } 16/20 7. Thành phần hằng b. Phương thức hằng Khái niệm:  là hàm thành phần của lớp nhưng không có khả năng thay đổi thành phần dl trong đối tượng Ví dụ: Với lớp PS thì phương thức in() là hằng Khai báo: (tham số) const ; Định nghĩa: ::(tham số) const { //thân hàm } 17/20 8. Thành phần đối tượng Khái niệm:  là thành phần dữ liệu của lớp có kiểu là một lớp khác Khai báo: Ví dụ: thành phần ns của lớp SV là đối tượng lớp date 18/20 Bài tập (week 5) • Xây dựng các toán tử nhập >>, xuất << của các bài tập trong tuần 4 • Nạp chồng các toán tử ==, !=, >, =, <= của các bài tập trong tuần 4 19/20 Qui cách nộp bài Gửi tới địa chỉ: sanghv@gmail.com CC: sanghv@hvtc.edu.vn Tiêu đề: [Lớp][BT3][Stt][Họ và tên] Ví dụ: [K43/41.01][BT3][14][Lê hoàng Vũ] Hạn nộp: 23h59’ ngày 29/01/2008