CHƯƠNG 4: PHƯƠNG THỨC TỰ THỰC HIỆN
lượt xem 7
download
Được thực hiện một cách tự động ngay sau khi đối tượng được tạo ra.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: CHƯƠNG 4: PHƯƠNG THỨC TỰ THỰC HIỆN
- 4/14/2010 MỤC TIÊU CHƯƠNG 4 2 PHƯƠNG THỨC TỰ THỰC HIỆN Hiểu rõ phương thức thiết lập, huỷ bỏ và thiết lập sao chép. 1 Xây dựng lớp có các phương thức tự động thực hiện. Sử dụng được các lớp theo nghĩa hướng về với đối tượng (tạo đối tượng, thì đối tượng tự giải quyết vấn đề nào đó) GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN Phương thức tự động thực hiện NỘI DUNG CHI TIẾT 4 3 KHÁI NiỆM Trong C++ có 2 phương thức thuộc loại này: Phương thức thiết lập (constructor) PHƯƠNG THỨC THIẾT LẬP Phương thức hủy bỏ (destructor) PHƯƠNG THỨC HỦY BỎ Chương trình mang đúng nghĩa hướng về với đối PHƯƠNG THỨC THIẾT LẬP TẠO BẢN SAO tượng: Khi tạo ra đối tượng, một số hành vi sẽ thực thi vào thời điểm đó. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 1
- 4/14/2010 Phương thức thiết lập Khi đó, 5 6 Được thực hiện một cách tự động ngay sau khi đối Đối tượng không chỉ đơn thuần là dữ liệu có cấu trúc tượng được tạo ra. đã được tạo ra. Nhằm thực hiện một số công việc ban đầu như: Mà còn, Tạo ra vùng bộ nhớ Mang tính hành động: một hoặc một số hành vi nào đó của nó Sao chép, khởi tạo giá trị ban đầu cho dữ liệu được thi hành. v.v... Và ngược lại, Lớp trong C++ có thể có hoặc không có phương thức Khi đối tượng mất đi, sẽ có một số hành động được thực thi. thiết lập Khi không có, một số hành động sau được thực hiện: Dành bộ nhớ cho các dữ liệu Khởi tạo giá trị không cho tất cả các byte của dữ liệu GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 8 7 Trong C++, phương thức thiết lập có tên trùng với tên Khi tạo đối tượng, nếu không chỉ định thêm bất kỳ của lớp, không có kiểu trả về. Chẳng hạn, điều gì. Chẳng hạn, STACK S; Thì phương thức thiết lập chuẩn được gọi thực hiện phương thức thiết lập, một cách tự động. tên giống tên lớp Không có phương thức thiết lập Tạo ra đối tượng p Không báo lỗi vì có pthức thiết lập chuẩn Tự động gọi phương được gọi tự động thức thiết lập GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 2
- 4/14/2010 Vậy, thế nào là constructor chuẩn 9 10 Phương thức thiết lập chuẩn là phương thức thiết lập class Point { Một lớp có thể có nhiều int xVal, yVal; không có tham số. phương thức thiết lập. public: Point () // Hàm thiết lập chuẩn Hoặc phương thức thiết lập với tất cả các tham số Chúng khác nhau qua { xVal = 0; yVal = 0; } được gán giá trị đầu. Chẳng hạn, Point (int x, int y) { danh sách tham số. xVal = x; yVal = y; STACK( unsigned int = 1237 ); } Đây chính là khả năng void OffsetPt (int , int ); … VECTOR( int = 2;double = 3.5 ); định nghĩa chồng lên }; void main() { nhau (overloading) của Point p1; Point p2(10,20); các hành vi trong lớp. } Phương thức thiết lập có thuộc tính truy cập là public. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN Gợi ý khi xây dựng constructor 11 12 Việc thường làm là gán trị cho các thành phần dữ liệu của đối tượng. Số constructor có trong một lớp thường là những dạng dữ liệu của đối tượng mà ta muốn có ngay lúc ban đầu. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 3
- 4/14/2010 Phương thức hủy bỏ 13 14 Phương thức hủy bỏ (destructor) được thực hiện trước khi đối tượng bị mất đi (trước khi vùng bộ nhớ dành cho đối tượng bị thu hồi). Sử dụng mang tính dọn dẹp, hoặc thông báo về sự kết Tổng cộng thúc hoạt động. có bao Trong C++, phương thức hủy bỏ được viết như sau: ph nhiêu nhiêu lần hàm hủy ~ClassName() được gọi ? Một lớp chỉ có 1 phương thức hủy bỏ Trong các thành phần của lớp, thành phần nào được khai báo trước, phương thức thiết lập sẽ thực hiện trước. Trong các thành phần của lớp, thành phần nào được khai báo trước, phương thức hủy bỏ sẽ thực hiện sau. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN BÀI TẬP LÀM TẠI LỚP 15 16 Xây dựng lớp PhanSo gồm 2 thành phần tử số và mẫu số. Xây dựng lớp NhietDo gồm 2 thành phần giá trị (số Viết hàm thiết lập (có và không có tham số) và hàm hủy thực) và loại (ký tự, C hoặc F). Viết các hàm cần thiết bỏ đáp ứng yêu cầu của hàm main sau: để hàm main sau đây chạy đúng void main() void main() { { PhanSo a; PhanSo b(1,2),c(3,4); NhietDo a(20,’C’),b(135,’F’); getch(); NhietDo c,d; } } Cho biết hàm thiết lập, hủy bỏ được gọi bao nhiêu lần và thứ Cho biết thứ tự thực hiện của hàm thiết lập và hủy bỏ tự thiết lập, hủy bỏ các đối tượng. Thời gian làm bài: 5 phút. Thời gian làm bài: 5 phút. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 4
- 4/14/2010 Phương thức thiết lập tạo bản sao Trường hợp tạo bản sao 17 18 Còn gọi là Copy Constructor. Khi cần tạo bản sao, có thể viết như sau: EXAMPLE A; Mục tiêu Nhằm để tạo ra bản sao của đối tượng, trong đó quản lý chặt chẽ EXAMPLE B = A; những gì được làm, được sao chép Khi đó B là bản sao của đối tượng A, những gì được Quản lý bản sao của đối tượng được tạo ra làm khi sao chép sẽ được quy định trong phương thức thiết lập tạo bản sao của lớp EXAMPLE. Đây là phương thức có trong C++ GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN Cách thức viết copy constructor 20 19 Với cách viết EXAMPLE B = A, chẳng qua để dễ sử Phương thức thiết lập tạo bản sao là một phương thức dụng – đồng nhất việc gán với việc sao chép. Thực như mọi phương thức khác, nên chứa các câu lệnh chất, câu lệnh này là: cần thực hiện. EXAMPLE B(A) Tuy nhiên, do đặc thù là được điều khiển một cách tự Cũng cần lưu ý thêm, câu lệnh gán chỉ gán giá trị câu động, nên tên gọi và tham số được quy ước: th B = A; ClassName( ClassName& ) Hoàn toàn khác câu lệnh – tạo đối tượng EXAMPLE B = A; GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 5
- 4/14/2010 Ví dụ 22 21 Trong lớp này, khi một bảo sao của đối tượng (được truyền qua tham số) được tạo ra, chỉ thành phần dữ liệu n của lớp mới có giá trị giống giá trị n của bản gốc Nói cách khác, nó chỉ "bắt chước" thành phần dữ liệu n. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 23 24 Một lớp luôn luôn có 1 phương thức thiết lập tạo bản sao. Phương thức đó có thể hiện thực hay không hiện thực. Khi không hiện thực, một phương thức tạo bản sao chuẩn sẽ âm thầm tồn tại. Nguy hiểm trong lập trình là khi mọi thứ Không có hàm thiết lập sao chép, hàm thiết diễn ra một cách âm thầm, người lập trình lập sao chép chuẩn sẽ được gọi không hay biết GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 6
- 4/14/2010 25 26 Phương thức thiết lập tạo bản sao được thi hành khi: Khởi tạo đối tượng bởi đối tượng đã có Tham số thực được truyền cho tham số giá trị của một phương thức nào đó. Phương thức trả đối tượng của lớp trở về thông qua tên gọi (return Obj) Hàm thiết lập sao chép được gọi khi tham số thực được truyền cho tham số giá trị của một phương thức nào đó. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 27 28 VẬY NẾU KHÔNG VIẾT COPY CONSTRUCTOR THÌ COPY CONSTRUCTOR CHUẨN SẼ ĐƯỢC GỌI => COPY CONSTRUCTOR CÓ CŨNG ĐƯỢC, KHÔNG CÓ CŨNG ĐƯỢC =>COPY CONSTRUCTOR KHÔNG CẦN THIẾT? ? Hàm thiết lập tạo bản sao được gọi khi phương thức trả đối tượng của lớp trở về thông qua tên gọi (return Obj) GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 7
- 4/14/2010 Xét lớp VECTOR như sau Lư u ý 29 30 class VECTOR{ Vấn đề chỉ nảy sinh phức tạp khi việc cấp phát và thu int size; hồi bộ nhớ được thực thi. double *data; Bởi khi đó, có thể vô tình thu hồi vùng bộ nhớ đang public: được sử dụng bởi một bản sao nào đó. VECTOR( int = 2 ); ); VECTOR( VECTOR& );//copy constructor ~VECTOR(); void setData( double = 0.0 ); void outData(); } GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN Chúng ta xem xét cụ thể hơn 32 31 VECTOR::VECTOR( int n ){ Nếu không có phương thức thiết lập tạo bản sao, hoặc size = n; viết không đúng yêu cầu. Một vùng bộ nhớ bị thu hồi data = new double[size]; hai lần setData(); Bởi thực chất có 2 đối tượng, nhưng trong trường hợp cout
- 4/14/2010 Có phương thức Khởi tạo đối tượng copy constructor Hai đối tượng có 2 vùng nhớ 33 34 VECTOR::VECTOR( VECTOR& V ){ void main(){ Object at 0x8f7d128e size = V.size; 0, 0, data = new double[size]; VECTOR u; copy constructor cout
- 4/14/2010 37 38 Chương trình gọi có thể viết double VECTOR::scalar(VECTOR v){ double t = 0.0; for(int i = 0; i
- 4/14/2010 Hàm trả về đối tượng 42 41 Phương thức thiết lập tạo bản sao sẽ được gọi để tạo ra Chẳng hạn, tổng của 2 vector: bản sao khi hàm trả về một đối tượng của lớp. VECTOR VECTOR::add(VECTOR v){ VECTOR t(size); for(int i=0; i
- 4/14/2010 Phép toán gán Lý do 45 46 Nhưng khi dùng phép toán gán Phép toán gán chuẩn sẽ gán từng byte của đối tượng này cho đối tượng kia, khi đó các biến liên quan đến VECTOR t(3); địa chỉ cũng hoàn toàn giống nhau. t = u.add(v); t.outData(); Kết quả không như mong đợi Phương thức thiết lập tạo bản sao sẽ tạo ra một đối tượng mới; còn phép toán gán chỉ làm thay đổi giá trị của đối tượng GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN TỰ KẾT LUẬN 47 48 Có thể bổ sung thêm hàm assign() để gán giá trị: KHI NÀO BẮT BUỘC PHẢI CÓ PHƯƠNG THỨC COPY CONSTRUCTOR TƯỜNG MINH? VECTOR VECTOR::assign(VECTOR v){ size = v.size(); for(int i = 0; i < size; i++ ) data[i] = v.data[i]; return *this; } GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 12
- 4/14/2010 TÓM TẮT 49 50 CÓ 3 LOẠI PHƯƠNG THỨC TỰ THỰC HIỆN: THIẾT LẬP, HỦY BỎ, SAO CHÉP CÁCH KHAI BÁO TỪNG LOẠI? PHƯƠNG THỨC CHUẨN? KHI NÀO CẦN PHƯƠNG THỨC COPY THANK YOU CONSTRUCTOR? GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN OOP-CHƯƠNG 4-PHƯƠNG THỨC TỰ THỰC HIỆN 13
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Chương 2: Phân tích từ vựng
15 p | 234 | 16
-
Bài giảng Kiến trúc máy tính - Chương 4: Bộ xử lý
128 p | 67 | 14
-
Bài giảng Phương pháp lập trình: Chương 4 - GV. Từ Thị Xuân Hiền
19 p | 104 | 11
-
Chương 4 "Danh sách dữ liệu"
24 p | 72 | 6
-
Quá trình hình thành quy trình thiết kế máy thu phát ký tự 32 bit p7
15 p | 66 | 4
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