Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 53 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
53
Dung lượng
8,27 MB
Nội dung
ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong Số tiết lý thuyết: 45 tiết Số tiết thực hành: 30 tiết http://sites.google.com/site/khaiphong Nội dung môn học: Chương 1: Tổng quan OOP Chương 2: Lớp & đối tượng Chương 3: Hàm hàm đa OOP Chương 4: Đa hóa toán tử Chương 5: Sự kế thừa tính đa hình http://sites.google.com/site/khaiphong Chương 3: Hàm (phương thức: method) hàm đa OOP Các hàm (phương thức) truy vấn Hàm khởi tạo chép (copy constructor) Hàm với đối số ngầm định Hàm tĩnh liệu tĩnh (static) Hàm bạn – lớp bạn (friend) Hàm đa (đa hóa hàm:overload) Hàm chuyển đổi kiểu Hàm chỗ (inline) Chương 3: Hàm hàm đa OOP Các hàm (phương thức) truy vấn Khái niệm Ví dụ Phân loại Đặc điểm http://sites.google.com/site/khaiphong Khái niệm: Là phương thức dùng để hỏi/gán giá trị cho thành viên liệu đối tượng Ví dụ: class Phanso{ private: int tuso,mauso; public: Phanso(); // Hàm khởi tạo không đối số Phanso(int,int); // Hàm khởi tạo hai đối số // Phương thức truy vấn int getTuso(){return tuso;} int getMauso(){return mauso;} void setTuso(int tu){tuso=tu;} void setMauso(int mau){mauso=mau;} }; Chương 3: Hàm hàm đa OOP Các hàm (phương thức) truy vấn Khái niệm Ví dụ Phân loại Đặc điểm http://sites.google.com/site/khaiphong Phân loại: Truy vấn đơn giản (“giá trị x bao nhiêu?”) Truy vấn điều kiện (“thành viên x có lớn 10 không?”) Truy vấn dẫn xuất (“tổng giá trị thành viên x y bao nhiêu?”) Đặc điểm: Phương thức dùng để bảo vệ nguyên tắc đóng gói, đảm bảo việc đọc/ghi kiểm tra giá trị cho thành viên liệu lớp Phương thức thường quy ước đặt tên theo dạng tiền tố (get/set/is ứng với loại truy vấn),tiếp theo tên thành viên liệu http://sites.google.com/site/khaiphong Chương 3: Hàm (phương thức: method) hàm đa OOP Các hàm (phương thức) truy vấn Hàm khởi tạo chép (copy constructor) Hàm với đối số ngầm định Hàm tĩnh liệu tĩnh (static) Hàm bạn – lớp bạn (friend) Hàm đa (đa hóa hàm:overload) Hàm chuyển đổi kiểu Hàm chỗ (inline) Chương 3: Hàm hàm đa OOP Hàm http://sites.google.com/site/khaiphong khởi tạo chép (copy constructor) Khái niệm Khái niệm: Là hàm khởi tạo có đối số đối Ví dụ tượng khác lớp Cú pháp Ví dụ: Trường hợp sử dụng void main(){ Phanso a; // khởi tạo không đối số Phanso b(2,3); // Hàm khởi tạo hai đối số Phanso c(b); // Hàm khởi tạo chép }; Cú pháp: class X{ … public: X(); // Hàm khởi tạo không đối số X(const X&); // Hàm khởi tạo chép }; Chương 3: Hàm hàm đa OOP Hàm http://sites.google.com/site/khaiphong khởi tạo chép (copy constructor) Khái niệm Trường hợp sử dụng: Khi đối tượng khởi tạo từ Ví dụ đối tượng khác lớp Cú pháp Khi đối tượng truyền Trường hợp sử dụng đối số cho hàm Khi hàm trả đối tượng Khi có cấp phát động hàm khởi tạo chép bắt buộc phải định nghĩa lại để tránh trường hợp trỏ NULL (null pointer assignment) Chương 3: Hàm hàm đa OOP http://sites.google.com/site/khaiphong Khi cấp phát động: Hàm khởi tạo chép (copy constructor) b c Khái niệm dụng: Tuso:3 Trường hợp sử Tuso:3 Mauso:5 Mauso:5 Khi đối tượng khởi tạo từ Ví dụ đối tượng khác lớp Cú pháp Khi đối tượng khởi tạo từ đối tượng khác lớp chương Khi đối tượng truyền trình tự tạo hàm khởi tạo saolàchép việc chép thực Trường hợp sử dụng mộtmặc đốiđịnh số cho hàm Khi trả vềnguồn sang đối tượng cách chép byte từ hàm đối tượng đối tượng đích Khi có cấp phát động hàm khởi (bc) phải định p chép bắt buộc s1tạo 0f003x Khi có cấp phát động: nghĩa lại để tránh trường hợp “HELLO” Ví dụ: CString s1(“Hello”); trỏ NULL (null pointer assignment) s2 p CString s2(s1); Khi đối tượng khởi tạo từ đối tượng khác lớp mà có cấp phát động hàm khởi tạo chép mặc định KHÔNG TẠO RA vùng nhớ cho đối tượng s2 đó, đối tượng s1 bị huỷ s2 trỏ vào vùng nhớ NULL Định nghĩa lại hàm khởi tạo chép Ví dụ mẫu Chương 3: Hàm hàm đa OOP http://sites.google.com/site/khaiphong KhiPhanso{ cấp phát động: class private: b c int tuso,mauso; Tuso:3 Tuso:3 public: Mauso:5 Mauso:5 Phanso(); // Hàm khởi tạo không đối số Phanso(int,int); Hàmtạokhởi tạo đối số Khi đối tượng được// khởi từ đối2tượng khác lớp chương Phanso(const Phanso&); // Hàm khởi tạo chép }; trình tự tạo hàm khởi tạo chép mặc định việc chép thực // Định lớp:từng byte từ đối tượng nguồn sang đối tượng đích hiệnnghĩa bên cách chép Phanso::Phanso(const Phanso& p){ (bc) tuso=p.tuso; p s1 0f003x mauso=p.mauso; Khi có cấp phát động: “HELLO” Ví dụ: CString s1(“Hello”); } s2 p void main(){ CString s2(s1); Khi đối khởi tạo tạo từ đối tượng khác lớp mà có cấp phát Phanso a;tượng // gọiđược hàm khởi Phanso() Phanso gọisao hàm tạo Phanso(int,int) động b(3,5); hàm khởi// tạo chépkhởi mặc định KHÔNG TẠO RA vùng nhớ cho Phanso c(b); // gọi hàm khởi tạo Phanso(const Phanso&); đối tượng s2 đó, đối tượng s1 bị huỷ s2 trỏ vào vùng nhớ NULL } Định nghĩa lại hàm khởi tạo chép Phân số 10 ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong 39 ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong 40 Bài tập trắc nghiệm http://sites.google.com/site/khaiphong Câu 1: class A bạn (friend class) class B, class B bạn class C A B C D class C truy xuất thành viên private class A class B truy xuất thành viên private class C class B truy xuất thành viên private class A class A truy xuất thành viên private class C 41 Bài tập trắc nghiệm http://sites.google.com/site/khaiphong Câu 2: Cho biết kết đoạn chương trình sau: class UIT{ int nabc; public: UIT(int x=0){ nabc=x;} ~UIT(){cout[...]... kiểu Hàm tại chỗ (inline) 15 Chương 3: Hàm và hàm đa năng trong OOP Hàm http://sites.google.com/site/khaiphong tĩnh và dữ liệu tĩnh (static) Khái niệm Khái niệm: Dữ liệu tĩnh: là dữ liệu dùng chung cho Ví dụ mọi thể hiện của lớp (hữu ích trong việc Trường hợp sử dụng chia sẻ thông tin chung giữa các đối tượng) , tồn tại trong suốt quá trình chạy của chương trình Hàm tĩnh: là hàm dùng để truy... các thành viên dữ liệu tĩnh của lớp Hàm này không thuộc về một đối tượng nào của lớp Hàm được gọi ngay cả khi không có đối tượng nào được tạo bằng cách sử dụng toán tử phạm vi “::” Cú pháp khai báo chung: dùng từ khoá static trước kiểu dữ liệu hay hàm 16 Chương 3: Hàm và hàm đa năng trong OOP Hàm http://sites.google.com/site/khaiphong tĩnh và dữ liệu tĩnh (static) Khái niệm Ví dụ: Dữ liệu... ngược lại hoặc giữa các đối tượng của các lớp khác nhau (do bộ biên dịch không thể tự động chuyển đổi được các kiểu do người dùng định nghĩa) Ví dụ: - Chuyển đổi từ lớp PHANSO thành một số nguyên - Chuyển đổi đối tượng từ mét sang đơn vị tính centimet - … 30 Chương 3: Hàm và hàm đa năng trong OOP Hàm chuyển đổi kiểu Khái niệm Phân loại Ví dụ http://sites.google.com/site/khaiphong Phân loại:... m){met=m;} operator int(){ return int(met*100);} // hàm chuyển đổi kiểu }; void main(){ donvi_met m(2); int cm; cm=m; // gọi hàm operator int() } 33 Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Trường hợp 3: Đổi kiểu giữa các đối tượng: class dv_met{ private: Khái niệm float met; public: Phân loại dv_met(float m){met=m;} };Ví dụ m: lớp nguồn class dv_ centimet{... 5 13 Chương 3: Hàm và hàm đa năng trong OOP Hàm http://sites.google.com/site/khaiphong với đối số ngầm định Đặc điểm: Khái niệm Ví dụ Đặc điểm class PS{ int tu,mau; public: PS(int t=0,int m=1); }; PS::PS(int t=5,int m=1){ tu=t;mau=m; } class PS{ int tu,mau; public: PS(int t=0,int m=1); }; PS::PS(int t,int m){ tu=t;mau=m; } Nếu một đối số được gán giá trị ngầm định thì tất cả các đối. .. met=float(cm)/100; Khai báo và định nghĩa một hàm chuyển đổi } như là một hàm thành viên của lớp: operator }; Chuyển đổi kiểu giữa các đối tượng: void main(){ Cần nắm rõ lớp nguồn và lớp đích trong việc donvi_met m; chuyển đổi mà ta cài đặt hàm khởi tạo chuyển int cm=100; đổi hay hàm chuyển đổi m=cm; // gọi hàm donvi_met(int cm) } 32 Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong... trong khai báo Ví dụ: int divide(int a,int b=2.5) // error int divide(int a,int b=2) // ok Giá trị ngầm định chỉ khai báo một lần trong khai báo hàm hoặc trong định nghĩa hàm nhưng không thể trong cả hai Ví dụ: 14 http://sites.google.com/site/khaiphong Chương 3: Hàm (phương thức: method) và hàm đa năng trong OOP Các hàm (phương thức) truy vấn Hàm khởi tạo sao chép (copy constructor) Hàm với đối. .. m(2); dv_centimet cm(150); cm=m; m=cm; } Lớp đích: cài đặt hàm khởi tạo chuyển đổi kiểu Hoặc Lớp nguồn: cài đặt hàm chuyển đổi kiểu operator 34 Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Trường hợp 3: Đổi kiểu giữa các đối tượng: m: lớp nguồn cm: lớp đích Cài đặt cho lớp dv_met:: - Hàm khởi tạo chuyển đổi kiểu (giải quyết trường hợp: m=cm) - Hàm chuyển đổi kiểu... http://sites.google.com/site/khaiphong Ví dụ: các kiểu hàm đa năng class Alpha{ private: int data; public: int Display(int); int Display(char); // Đa năng với các kiểu dữ liệu khác nhau void Display(char,int); // Đa năng với số lượng đối số khác nhau float Display(int); // Error: đây không phài là hàm đa năng vì đã tồn tại hàm Display(int) … }; 28 http://sites.google.com/site/khaiphong Chương 3: Hàm (phương... (copy constructor) Hàm với đối số ngầm định Hàm tĩnh và dữ liệu tĩnh (static) Hàm bạn – lớp bạn (friend) Hàm đa năng (đa năng hóa hàm:overload) Hàm chuyển đổi kiểu Hàm tại chỗ (inline) 29 Chương 3: Hàm và hàm đa năng trong OOP Hàm chuyển đổi kiểu Khái niệm Phân loại Ví dụ http://sites.google.com/site/khaiphong Khái niệm: Là hàm dùng để chuyển đổi các đối tượng thành các kiểu dữ liệu ... Tuso :3 Mauso:5 Mauso:5 Khi đối tượng khởi tạo từ Ví dụ đối tượng khác lớp Cú pháp Khi đối tượng khởi tạo từ đối tượng khác lớp chương Khi đối tượng truyền trình tự tạo hàm khởi tạo saolàchép...http://sites.google.com/site/khaiphong Nội dung môn học: Chương 1: Tổng quan OOP Chương 2: Lớp & đối tượng Chương 3: Hàm hàm đa OOP Chương 4: Đa hóa toán tử Chương 5: Sự kế thừa tính... Phanso&); đối tượng s2 đó, đối tượng s1 bị huỷ s2 trỏ vào vùng nhớ NULL } Định nghĩa lại hàm khởi tạo chép Phân số 10 Chương 3: Hàm hàm đa OOP http://sites.google.com/site/khaiphong p 0f003x class