Bài giảng Lập trình hướng đối tượng: Chương 3 - GV. Dương Khai Phong
lượt xem 5
download
Nội dung của chương 3 Hàm và hàm đa năng trong OOP thuộc bài giảng lập trình hướng đối tượng nhằm trình bày về các nội dung chính: hàm 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 số ngầm định, hàm tĩnh và dữ liệu tĩnh (static).
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình hướng đối tượng: Chương 3 - GV. Dương Khai Phong
- Đ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 1
- http://sites.google.com/site/khaiphong Nội dung môn học: Chương 1: Tổng quan về OOP Chương 2: Lớp & đối tượng Chương 3: Hàm và hàm đa năng trong OOP Chương 4: Đa năng hóa toán tử Chương 5: Sự kế thừa và tính đa hình 2
- 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 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) 3
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Các hàm (phương thức) truy vấn Khái niệm Khái niệm: Ví dụ Là các phương thức dùng để hỏi/gán giá trị cho Phân loại các thành viên dữ liệu của một đối tượng. Ví dụ: Đặc điểm 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;} }; 4
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Các hàm (phương thức) truy vấn Khái niệm Phân loại: Ví dụ Truy vấn đơn giản (“giá trị của x là bao Phân loại nhiêu?”) Truy vấn điều kiện (“thành viên x có lớn hơn 10 Đặc điểm không?”) Truy vấn dẫn xuất (“tổng giá trị của các thành viên x và y là bao nhiêu?”) Đặc điểm: Phương thức dùng để bảo vệ các nguyên tắc đóng gói, đảm bảo việc đọc/ghi và kiểm tra giá trị cho các thành viên dữ liệu của lớp. Phương thức này thường được quy ước đặt tên theo dạng tiền tố (get/set/is ứng với từng loại truy vấn),tiếp theo là tên của thành viên dữ liệu. 5
- 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 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) 6
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Hàm khởi tạo sao chép (copy constructor) Khái niệm Khái niệm: Ví dụ Là hàm khởi tạo có đối số là một đối Cú pháp tượng khác của cùng lớ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 sao 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 sao chép }; 7
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Hàm khởi tạo sao chép (copy constructor) Khái niệm Trường hợp sử dụng: Ví dụ Khi một đối tượng được khởi tạo từ một đối tượng khác của cùng lớp. Cú pháp Khi một đối tượng được truyền như Trường hợp sử dụng là một đối số cho hàm. Khi hàm trả về một đối tượng. Khi có cấp phát động thì hàm khởi tạo sao chép bắt buộc phải định nghĩa lại để tránh trường hợp con trỏ NULL (null pointer assignment). 8
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Khi không có cấp phát động: Hàm khởi tạo sao chép (copy constructor) b c Khái niệm Tuso:3 Trường hợp sử dụng: Tuso:3 Ví dụ Mauso:5 Khi một đối tượng được khởi tạo từ Mauso:5 một đối tượng khác của cùng lớp. Cú Khi một đối tượng được khởi tạo từ một đối tượng khác của cùng lớp thì chương pháp Khi một đối tượng được truyền như Trườngtạo ra một dụng trình tự hợp sử hàm khởi tạo sao chép mặc định nhưnghàm. chép chỉ thực là một đối số cho việc sao hiện bằng cách sao chép từng Khi hàm trả về một sang tượng. đích byte từ đối tượng nguồn đối đối tượng (bc). Khi có cấp phát động thì hàm khởi Khi có cấp phát động: s1tạo sao chép bắt buộc phải định p 0f003x nghĩa lại để tránh trường hợp con Ví dụ: CString s1(“Hello”); s2trỏ NULL (null pointer “HELLO” p assignment). CString s2(s1); Khi đối tượng được khởi tạo từ một đối tượng khác của cùng lớp mà có cấp phát động thì hàm khởi tạo sao chép mặc định sẽ KHÔNG TẠO RA vùng nhớ mới cho đối tượng s2 do đó, khi đối tượng s1 bị huỷ thì s2 sẽ trỏ vào vùng nhớ NULL Định nghĩa lại hàm khởi tạo sao chép Ví dụ mẫu 9
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Khi không có class Phanso{ cấp phát động: private: b c int tuso,mauso; public: Tuso:3 Tuso:3 Mauso:5 Mauso:5 Phanso(); // Hàm khởi tạo không đối số Khi một đối tượng được khởi tạo từ một đối tượngsố của cùng lớp thì chương Phanso(int,int); // Hàm khởi tạo 2 đối khác Phanso(const Phanso&); // Hàm khởi tạo sao chép }; trình tự tạo ra một hàm khởi tạo sao chép mặc định nhưng việc sao chép chỉ thực // Định nghĩa bên ngoài lớp: hiện bằng cách sao chép từng byte từ đối tượng nguồn sang đối tượng đích Phanso::Phanso(const Phanso& p){ (bc). tuso=p.tuso; s1 p 0f003x mauso=p.mauso; Khi có cấp phát động: } Ví dụ: CString s1(“Hello”); “HELLO” s2 p void main(){ CString s2(s1); Khi đối // gọi hàm khởi từ một đối tượng Phanso a;tượng được khởi tạo tạo Phanso() khác của cùng lớp mà có cấp phát động thì hàm khởi gọi hàm khởi tạo sẽ KHÔNG TẠO Phanso b(3,5); // tạo sao chép mặc định Phanso(int,int)RA vùng nhớ mới cho Phanso c(b); // gọi hàm khởi tạo Phanso(const Phanso&); đối tượng s2 do đó, khi đối tượng s1 bị huỷ thì s2 sẽ trỏ vào vùng nhớ NULL } Định nghĩa lại hàm khởi tạo sao chép Phân số 10
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong class CString{ s1 p 0f003x private: “Hello” char *p; s2 p 0f005x public: CString(); // Hàm khởi tạo không đối số “Hello” CString(char *s); // Hàm khởi tạo 1 đối số CString(const CString&); // Hàm khởi tạo sao chép ~CString(); // Hàm hủy }; // Định nghĩa bên ngoài lớp: CString::CString(const CString& s) { p=strdup(s.p); } void main(){ CString s1; // gọi hàm khởi tạo CString() CString s2(“Hello world”); // gọi hàm khởi tạo CString(char *str) CString s3(s2); // gọi hàm khởi tạo CString(const CString&); } Chuỗi 11
- 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 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) 12
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Hàm với đối số ngầm định Khái niệm Khái niệm: Ví dụ Là hàm mà ta đã chỉ định trước những giá Đặc điểm trị mặc định sẽ được truyền cho các đối số trong trường hợp chúng được bỏ qua khi hàm được gọi. Ví dụ: b=2 là đối số ngầm định float divide(int a,int b=2){ return (float)a/b; Giá trị ngầm định b=2 } được dùng. void main(){ cout
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Hàm với đối số ngầm định Khái niệm Đặc điểm: Ví dụ Nếu một đối số được gán giá trị ngầm định thì tất cả các đối số theo sau nó đều phải được gán Đặc điểm giá trị ngầm định. Ví dụ: class PS{ int divide(int a=8, int b) // error int tu,mau; public: int divide(int a=8, int b=10) // ok PS(int t=0,int m=1); }; Giá trị ngầm định phải đúng với kiểu trong khai PS::PS(int t=5,int m=1){ báo. tu=t;mau=m; } Ví dụ: int divide(int a,int b=2.5) // error class PS{ int divide(int a,int b=2) // ok int tu,mau; public: Giá trị ngầm định chỉ khai báo một lần trong PS(int t=0,int m=1); }; khai báo hàm hoặc trong định nghĩa hàm nhưng PS::PS(int t,int m){ không thể trong cả hai. tu=t;mau=m; } 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 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) 15
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Hàm tĩnh và dữ liệu tĩnh (static) Khái niệm Khái niệm: Ví dụ Dữ liệu tĩnh: là dữ liệu dùng chung cho Trường hợp sử dụng mọi thể hiện của lớp (hữu ích trong việc 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ập 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 http://sites.google.com/site/khaiphong Hàm tĩnh và dữ liệu tĩnh (static) Khái niệm Ví dụ: Dữ liệu tĩnh Ví dụ class Student{ private: Trường hợp sử dụng int MaSV; static int count; // dữ liệu tĩnh lưu trữ các thể hiện của Student public: Student(); void printCount(); ~Student(); }; int Student::count=0; // bắt buộc phải khởi tạo dữ liệu tĩnh trước khi sử dụng, gán =0 vì chưa có đối tượng nào được tạo 17
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Hàm tĩnh và dữ liệu tĩnh (static) Khái niệm Ví dụ: Hàm tĩnh Ví dụ class Student{ private: Trường hợp sử dụng int MaSV; static int count; // dữ liệu tĩnh lưu trữ các thể hiện của Student public: Student(); static void printCount(); // hàm tĩnh ~Student(); }; int Student::count=0; 18
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Trường hợp sử dụng dữ liệu tĩnh: cho biết kết quả của CT sau Hàm tĩnh class Student{ private: và dữ liệu tĩnh (static) int MaSV; static niệm Ví dụ: Hàm Student Khái int count; // dữ liệu tĩnh lưu trữ các thể hiện củatĩnh public: Ví dụ Student(); class Student{ void printCount(); private: Trường hợp sử dụng }; ~Student(); int MaSV; int Student::count=0; // bắt buộc phải khởi tạo dữ liệu tĩnh trước khi sử dụng Student::Student(){ static int count; // dữ liệu tĩnh lưu trữ các thể count++; hiện của Student } Student::~Student(){ public: count--; } Student(); void Student:: printCount(){ static void printCount(); // hàm tĩnh cout
- Chương 3: Hàm và hàm đa năng trong OOP http://sites.google.com/site/khaiphong Trường hợp sử dụng hàm tĩnh: cho biết kết quả của CT sau Hàm tĩnh và dữ liệu tĩnh (static) class Student{ private: int MaSV; Ví dụ: Hàm Student Khái int count; // dữ liệu tĩnh lưu trữ các thể hiện củatĩnh static niệm public: Ví dụ Student(); class Student{ void printCount(); private: Trường hợp sử dụng }; ~Student(); int MaSV; int Student::count=0; // bắt buộc phải khởi tạo dữ liệu tĩnh trước khi sử dụng Student::Student(){ static int count; // dữ liệu tĩnh lưu trữ các thể count++; } hiện của Student Student::~Student(){ public: count--; } Student(); void Student:: printCount(){ static void printCount(); // hàm tĩnh cout
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 141 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 80 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 120 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 103 | 8
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 101 | 7
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 88 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 105 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 11 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 16 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn