Bài giảng Kỹ thuật lập trình: Chương VI - Lưu Hồng Việt
Số trang: 27
Loại file: pdf
Dung lượng: 310.78 KB
Lượt xem: 14
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Kỹ thuật lập trình - Chương VI: Lớp và đối tượng II, trình bày các nội dung chính: tạo và hủy đối tượng, xây dựng các hàm tạo và hàm hủy, nạp chồng toán tử, khai báo friend, thành viên static. Đây là tài liệu học tập, tham khảo cho sinh viên và giảng viên ngành Kỹ thuật lập trình.
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình: Chương VI - Lưu Hồng Việt Kỹ thuật lập trình Chương 1 Chương 6: Lớp và ₫ối tượng II 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 1010011000110010010010 stop() 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 1010011000110010010010+ B*u; y = A*x 1010011000110010010010 1100101100100010000010+ d*u; 1100101100100010000010 x = C*x LQGController 0101010101010101100001 0101010101010101100001 start() 0101010100101010100101 0101010100101010100101 stop() 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 10/30/2007 Nội dung chương 6 6.1 Tạo và hủy ₫ối tượng 6.2 Xây dựng các hàm tạo và hàm hủy 6.3 Nạp chồng toán tử 6.4 Khai báo friend 6.5 Thành viên static (tự ₫ọc) Chương 6: Lớp và đối tượng II © 2007 AC - HUT 2 6.1 Tạo và hủy ₫ối tượng Có bao nhiêu cách ₫ể tạo/hủy ₫ối tượng? Tạo/hủy tự ₫ộng: Định nghĩa một biến thuộc một lớp — Bộ nhớ của ₫ối tượng (chứa các dữ liệu biến thành viên) ₫ược tự ₫ộng cấp phát giống như với một biến thông thương — Bộ nhớ của ₫ối tượng ₫ược giải phóng khi ra khỏi phạm vi ₫ịnh nghĩa class X { int a, b; ... }; void f( X x1) { if (..) { X x2; Đối tượng ₫ược tạo ra trong ngăn xếp ... Thời ₫iểm bộ nhớ cho x2 ₫ược giải phóng } } Thời ₫iểm bộ nhớ cho x1 ₫ược giải phóng X x; Đối tượng ₫ược tạo ra trong vùng dữ liệu chương trình Chương 6: Lớp và đối tượng II © 2007 AC - HUT 3 Tạo/hủy ₫ối tượng ₫ộng bằng toán tử new và delete: X* pX = 0; void f(...) { if (..) { Đối tượng ₫ược tạo ra pX = new X; trong vùng nhớ tự do ... } } void g(...) { ... if (pX != 0) { Bộ nhớ của ₫ối tượng trong delete pX; heap ₫ược giải phóng ... } } Chương 6: Lớp và đối tượng II © 2007 AC - HUT 4 Vấn ₫ề 1: Khởi tạo trạng thái ₫ối tượng Sau khi ₫ược tạo ra, trạng thái của ₫ối tượng (bao gồm dữ liệu bên trong và các mối quan hệ) thường là bất ₫ịnh => sử dụng kém an toàn, kém tin cậy, kém thuận tiện X x; // x.a = ?, x.b = ? X *px = new X; // px->a = ?, px->b = ?; class Vector { int n; double *data; ... }; Vector v; // v.n = ?, v.data = ? Làm sao ₫ể ngay sau khi ₫ược tạo ra, ₫ối tượng có trạng thái ban ₫ầu theo ý muốn của chương trình? X x = {1, 2}; // Error! cannot access private members Làm sao ₫ể tạo một ₫ối tượng là bản sao của một ₫ối tượng có kiểu khác? class Y { int c, d; }; Y y = x; // Error, X and Y are not the same type, // they are not compatible Chương 6: Lớp và đối tượng II © 2007 AC - HUT 5 Vấn ₫ề 2: Quản lý tài nguyên Đối với các ₫ối tượng sử dụng bộ nhớ ₫ộng, việc cấp phát và giải phóng bộ nhớ ₫ộng nên thực hiện như thế nào cho an toàn? class Vector { int nelem; double *data; public: void create(int n) { data = new double[nelem=n];} void destroy() { delete[] data; nlem = 0; } void putElem(int i, double d) { data[i] = d; } }; Vector v1, v2; v1.create(5); // forget to call create for v2 v2.putElem(1,2.5); // BIG problem! // forget to call destroy for v1, also a BIG problem Vấn ₫ề tương tự xảy ra khi sử dụng tệp tin, cổng truyền thông, và các tài nguyên khác trong máy tính Chương 6: Lớp và đối tượng II © 2007 AC - HUT 6 Giải pháp chung: Hàm tạo và hàm hủy Một hàm tạo luôn ₫ược tự ₫ộng gọi mỗi khi ₫ối tượng ₫ược tạo, hàm hủy luôn ₫ược gọi mỗi khi ₫ối tượng bị hủy: class X { int a,b; public: X() { a = b = 0; } // constructor (1) X(int s, int t) { a = s; b = t;} // constructor (2) ~X() {} // destructor }; void f(X x1) { Gọi hàm tạo (1) không tham if (..) { số (hàm tạo mặc ₫ịnh) X x2(1,2); Gọi hàm tạo (2) X x3(x2); Gọi hàm ... hủy cho x1 } Gọi hàm hủy } cho x2, x3 Gọi hàm tạo bản sao X *px1 = new X(1,2), *px2 = new X; delete px1; delete px2; Gọi hàm hủy cho *px1 và *px2 Chương 6: Lớp và đối tượng II © 2007 AC - HUT 7 6.2 Xây dựng các hàm tạo và hàm hủy Hàm tạo là cơ hội ₫ể khởi tạo và cấp phát tài nguyên Hàm hủy là cơ hộ ...
Nội dung trích xuất từ tài liệu:
Bài giảng Kỹ thuật lập trình: Chương VI - Lưu Hồng Việt Kỹ thuật lập trình Chương 1 Chương 6: Lớp và ₫ối tượng II 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 1010011000110010010010 stop() 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 1010011000110010010010+ B*u; y = A*x 1010011000110010010010 1100101100100010000010+ d*u; 1100101100100010000010 x = C*x LQGController 0101010101010101100001 0101010101010101100001 start() 0101010100101010100101 0101010100101010100101 stop() 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 10/30/2007 Nội dung chương 6 6.1 Tạo và hủy ₫ối tượng 6.2 Xây dựng các hàm tạo và hàm hủy 6.3 Nạp chồng toán tử 6.4 Khai báo friend 6.5 Thành viên static (tự ₫ọc) Chương 6: Lớp và đối tượng II © 2007 AC - HUT 2 6.1 Tạo và hủy ₫ối tượng Có bao nhiêu cách ₫ể tạo/hủy ₫ối tượng? Tạo/hủy tự ₫ộng: Định nghĩa một biến thuộc một lớp — Bộ nhớ của ₫ối tượng (chứa các dữ liệu biến thành viên) ₫ược tự ₫ộng cấp phát giống như với một biến thông thương — Bộ nhớ của ₫ối tượng ₫ược giải phóng khi ra khỏi phạm vi ₫ịnh nghĩa class X { int a, b; ... }; void f( X x1) { if (..) { X x2; Đối tượng ₫ược tạo ra trong ngăn xếp ... Thời ₫iểm bộ nhớ cho x2 ₫ược giải phóng } } Thời ₫iểm bộ nhớ cho x1 ₫ược giải phóng X x; Đối tượng ₫ược tạo ra trong vùng dữ liệu chương trình Chương 6: Lớp và đối tượng II © 2007 AC - HUT 3 Tạo/hủy ₫ối tượng ₫ộng bằng toán tử new và delete: X* pX = 0; void f(...) { if (..) { Đối tượng ₫ược tạo ra pX = new X; trong vùng nhớ tự do ... } } void g(...) { ... if (pX != 0) { Bộ nhớ của ₫ối tượng trong delete pX; heap ₫ược giải phóng ... } } Chương 6: Lớp và đối tượng II © 2007 AC - HUT 4 Vấn ₫ề 1: Khởi tạo trạng thái ₫ối tượng Sau khi ₫ược tạo ra, trạng thái của ₫ối tượng (bao gồm dữ liệu bên trong và các mối quan hệ) thường là bất ₫ịnh => sử dụng kém an toàn, kém tin cậy, kém thuận tiện X x; // x.a = ?, x.b = ? X *px = new X; // px->a = ?, px->b = ?; class Vector { int n; double *data; ... }; Vector v; // v.n = ?, v.data = ? Làm sao ₫ể ngay sau khi ₫ược tạo ra, ₫ối tượng có trạng thái ban ₫ầu theo ý muốn của chương trình? X x = {1, 2}; // Error! cannot access private members Làm sao ₫ể tạo một ₫ối tượng là bản sao của một ₫ối tượng có kiểu khác? class Y { int c, d; }; Y y = x; // Error, X and Y are not the same type, // they are not compatible Chương 6: Lớp và đối tượng II © 2007 AC - HUT 5 Vấn ₫ề 2: Quản lý tài nguyên Đối với các ₫ối tượng sử dụng bộ nhớ ₫ộng, việc cấp phát và giải phóng bộ nhớ ₫ộng nên thực hiện như thế nào cho an toàn? class Vector { int nelem; double *data; public: void create(int n) { data = new double[nelem=n];} void destroy() { delete[] data; nlem = 0; } void putElem(int i, double d) { data[i] = d; } }; Vector v1, v2; v1.create(5); // forget to call create for v2 v2.putElem(1,2.5); // BIG problem! // forget to call destroy for v1, also a BIG problem Vấn ₫ề tương tự xảy ra khi sử dụng tệp tin, cổng truyền thông, và các tài nguyên khác trong máy tính Chương 6: Lớp và đối tượng II © 2007 AC - HUT 6 Giải pháp chung: Hàm tạo và hàm hủy Một hàm tạo luôn ₫ược tự ₫ộng gọi mỗi khi ₫ối tượng ₫ược tạo, hàm hủy luôn ₫ược gọi mỗi khi ₫ối tượng bị hủy: class X { int a,b; public: X() { a = b = 0; } // constructor (1) X(int s, int t) { a = s; b = t;} // constructor (2) ~X() {} // destructor }; void f(X x1) { Gọi hàm tạo (1) không tham if (..) { số (hàm tạo mặc ₫ịnh) X x2(1,2); Gọi hàm tạo (2) X x3(x2); Gọi hàm ... hủy cho x1 } Gọi hàm hủy } cho x2, x3 Gọi hàm tạo bản sao X *px1 = new X(1,2), *px2 = new X; delete px1; delete px2; Gọi hàm hủy cho *px1 và *px2 Chương 6: Lớp và đối tượng II © 2007 AC - HUT 7 6.2 Xây dựng các hàm tạo và hàm hủy Hàm tạo là cơ hội ₫ể khởi tạo và cấp phát tài nguyên Hàm hủy là cơ hộ ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Kỹ thuật lập trình Chương VI Bài giảng Kỹ thuật lập trình Kỹ thuật lập trình Xây dựng các hàm tạo Nạp chồng toán tử Khai báo friend Thành viên staticGợi ý tài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 251 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 192 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 182 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 151 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 150 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 117 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 104 0 0 -
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 trang 103 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 84 0 0