Lớp đối tượng và tính đóng gói

51 589 0
Lớp đối tượng và tính đóng gói

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng lập trình hướng đối tượng - Thầy Cường Học viện bưu chính viễn thông TP HCM

Chương 2 Lớp, đối tượng tính đóng góiLớp • Hàm tạo, hàm hủy • Tham số của hàm tạo • Nội tuyến tự động • Gán đối tượng • Truyền các đối tượng sang hàm • Trả đối tượng từ hàm • Hàm friend Chương 2 Lớp, Đối tượng tính đóng gói 17 17 Chương 2 Lớp, Đối tượng tính đóng gói 18 18I/ Lớp (class) • Cú pháp khai báo lớp class class_name { private : // khai báo các biến ; // khai báo các hàm; public : // khai báo các biến ; // khai báo các hàm; } objects_list ; class_name tên của lớp do người dùng đònh nghiã. objects_list danh sách các đối tượng, có thể tùy chọn. Các biến, các hàm khai báo bên trong một lớp gọi là các thành viên của lớp đó. Từ khoá Ý nghiã class khai báo một lớp private : qui đònh các biến, các hàm là các thành viên riêng của lớp, bên ngoài lớp không thể truy cập được. public : qui đònh các biến, các hàm là các thành viên chung của lớp, có thể truy cập chúng từ các thành viên khác của lớp bởi các thành phần khác của chương trình có chứa lớp đó. • Cú pháp đònh nghiã hàm thành viên data_type class_name :: func_name (arg_list) { // body of function } data_type kiểu dữ liệu của phương thức trả về class_name tên lớp chứa hàm :: toán tử phân giải phạm vi (scope resolution operator) Chương 2 Lớp, Đối tượng tính đóng gói 19 19func_name tên hàm arg_list danh sách các đối số Ví dụ 1.1 Khai báo lớp có tên "myclass" class myclass { // private to myclass int a; public: void set_a(int num); int get_a(); }; void myclass::set_a(int num) // đònh nghiã hàm void set_a(int num) { a = num; } int myclass::get_a() // đònh nghiã hàm int get_a() { return a; } int main() { myclass ob1, ob2; // khai báo 2 đối tượng có tên ob1, ob2 ob1.set_a(10); // thiết lập giá trò 10 cho bản sao cuả biến a của ob1 ob2.set_a(99); // thiết lập giá trò 99 cho bản sao cuả biến a của ob2 cout << ob1.get_a() << "\n"; cout << ob2.get_a() << "\n"; return 0; } Chương 2 Lớp, Đối tượng tính đóng gói 20 20Ví dụ 1.2 Lỗi biên dòch khi truy cập đến biến riêng a từ bên ngoài lớp myclass int main() { myclass ob1, ob2; ob1.a = 10; // ERROR! cannot access private member ob2.a = 99; // by non-member functions. return 0; } Ví dụ 1.3 Khi a là biến chung, có thể truy cập a từ bên ngoài lớp myclass #include <iostream.h> class myclass { public: // now a is public int a; // and there is no need for set_a() or get_a() }; int main() { myclass ob1, ob2; // here, a is accessed directly ob1.a = 10; ob2.a = 99; cout << ob1.a << "\n"; cout << ob2.a << "\n"; return 0; } Chương 2 Lớp, Đối tượng tính đóng gói 21 21Ví dụ 1.4 Tạo lớp stack dùng để chứa các ký tự #include <iostream.h> #define SIZE 10 // Declare a stack class for characters class stack { char stck[SIZE]; // holds the stack int tos; // index of top-of-stack public: void init(); // initialize stack void push(char ch); // push character on stack char pop(); // pop character from stack }; // Initialize the stack void stack::init() { tos = 0; } // Push a character. void stack::push(char ch) { if(tos == SIZE) { cout << "Stack is full"; return; } stck[tos] = ch; tos++; } // Pop a character. char stack::pop() { if(tos == 0) { cout << "Stack is empty"; return 0; // return null on empty stack Chương 2 Lớp, Đối tượng tính đóng gói 22 22 } tos--; return stck[tos]; } int main() { stack s1, s2; // create two stacks int i; // initialize the stacks s1.init(); s2.init(); s1.push('a'); s2.push('x'); s1.push('b'); s2.push('y'); s1.push('c'); s2.push('z'); for(i=0; i<3; i++) cout << "Pop s1: " << s1.pop() << "\n"; for(i=0; i<3; i++) cout << "Pop s2: " << s2.pop() << "\n"; return 0; } @ Kết quả xuất dữ liệu của chương trình ? • Lưu ý Khai báo lớp là một trừu tượng logic để đònh nghiã một kiểu dữ liệu mới. Khai báo một đối tượng dựa vào lớp, tạo ra một thực thể vật lý (có điạ chỉ trong bộ nhớ) có kiểu dữ liệu đó. Chương 2 Lớp, Đối tượng tính đóng gói 23 23Mỗi đối tượng của một lớp có bản sao riêng của các biến được khai báo trong lớp. Bài tập I 1. Hãy tạo lớp card để giữ các mục nhập catalog thẻ thư viện, chưá tựa đề sách (kiểu chuỗi), tên tác giả (kiểu chuỗi) số bản (kiểu nguyên). Dùng hàm thành viên chung store() để lưu trữ thông tin về sách hàm thành viên chung show() để hiển thò thông tin. Viết chương trình thực hiện yêu cầu trên. 2. Tạo lớp hàng đợi (queue) để giữ hàng các số nguyên. Tạo một kích thước hàng dài 100 số nguyên. Viết chương trình thực hiện yêu cầu trên. II/ Hàm tạo & hàm hủy 1/ Khái niệm Hàm tạo (constructor) có cùng tên với lớp, là hàm thành phần của một lớp, không có kiểu trả về. Mục đích của hàm tạo nhằm tạo ra các khởi đầu cho một đối tượng. Hàm tạo được gọi tự động mỗi khi đối tượng của lớp đó được tạo ra. 2/ Khai báo class class_name { // khai báo các biến hàm ; public : // khai báo các biến hàm ; class_name() ; // khai báo hàm tạo } objects_list ; Ví dụ 2.1 Lớp myclass có hàm tạo myclass() hàm show() #include <iostream.h> Chương 2 Lớp, Đối tượng tính đóng gói 24 24class myclass { int a; public: myclass() ; // constructor void show(); }; myclass::myclass() // đònh nghiã hàm tạo { cout << "In constructor\n"; a = 10; } void myclass::show() { cout << a; } int main() { myclass ob; // hàm tạo myclass() được gọi tự động khi đối tượng ob được tạo ra ob.show(); return 0; } Đối với các đối tượng chung, một hàm tạo của đối tượng được gọi một lần khi chương trình bắt đầu thi hành lần đầu. Đối với các đối tượng riêng, hàm tạo của đối tượng được gọi mỗi khi lệnh khai báo được thi hành. 3/ Khái niệm hàm hủy (destructor) Hàm hủy có cùng tên với lớp, có kèm theo dấu ~ đứng trước, là hàm thành phần của một lớp, không có kiểu trả về. Mục đích của hàm hủy nhằm thi hành một số tác động khi đối tượng bò hủy bỏ, chẳng hạn một đối tượng yêu cầu cấp phát bộ nhớ khi đối tượng được tạo ra giải Chương 2 Lớp, Đối tượng tính đóng gói 25 25phóng bộ nhớ khi đối tượng bò hủy bỏ. Hàm hủy được gọi tự động mỗi khi đối tượng của lớp đó bò hủy bỏ. 4/ Khai báo class class_name { // khai báo các biến hàm ; public : // khai báo các biến hàm ; class_name(); // khai báo hàm tạo ~class_name(); // khai báo hàm hủy } objects_list ; Ví dụ 2.2 Lớp myclass có hàm tạo myclass() hàm hủy ~myclass() #include <iostream.h> class myclass { int a; public: myclass(); // constructor ~myclass(); // destructor void show(); }; myclass::myclass() { cout << "In constructor\n"; a = 10; } myclass::~myclass() { cout << "Destructing .\n"; } [...]... Lớp, đối tượng tính đóng gói • Lớp • Hàm tạo, hàm hủy • Tham số của hàm tạo • Nội tuyến tự động • Gán đối tượng • Truyền các đối tượng sang hàm • Trả đối tượng từ hàm • Hàm friend Chương 2 Lớp , Đ ối tượng tính đóng gói 17 17 Chương 2 Lớp , Đ ối tượng tính. .. Chương 2 Lớp , Đ ối tượng tính đóng gói 57 57 Bài tập VII 1. Viết chương trình tạo lớp Who, cho hàm tạo của Who nhận một đối số ký tự mà đối số này được dùng để nhận dạng một đối tượng. Hãy cho hàm tạo hiển thị một thông báo tương tự thông báo sau đây khi tạo ra một đối tượng : Constructing who #x Trong đó x là ký tự nhận dạng. Hãy tạo hàm make_who() để trả về đối tượng Who....Chương 2 Lớp , Đ ối tượng tính đóng gói 25 25 phóng bộ nhớ khi đối tượng bị hủy bỏ. Hàm hủy được gọi tự động mỗi khi đối tượng của lớp đó bị hủy bỏ. 4/ Khai baùo class class_name { // khai baùo caùc biến hàm ; public : // khai báo các biến hàm ; class_name(); // khai báo hàm tạo ~class_name() ; // khai báo hàm hủy } objects_list ; Ví dụ 2.2 Lớp myclass có... báo hàm tạo } objects_list ; Ví dụ 2.1 Lớp myclass có hàm tạo myclass() hàm show() #include <iostream.h> Chương 2 Lớp , Đ ối tượng tính đóng gói 30 30 s2.show(); return 0; } Ví dụ 2.5 Dùng đối tượng của lớp timer để xác định khoảng thời gian khi một đối tượng kiểu timer được tạo cho đến khi bị hủy. #include <iostream.h> #include <ctime.h>... C++."); s1.show(); Chương 2 Lớp , Đ ối tượng tính đóng gói 41 41 o2 = o1 ; o1.show(); o2.show(); return 0; } Nếu bổ sung các dòng lệnh sau đây vào trước dòng return 0; , kết quả sẽ ra sao ? o1.set(3, 2); o1.show(); o2.show(); 2/ Các tính chất a/ Lệnh gán đối tượng chỉ áp dụng cho các đối tượng có cùng kiểu (về mặt vật lý) cùng tên kiểu . Ví dụ 5.2 //... s Freeing s Hello Freeing s Null pointer assignment Khi một đối tượng được trả về từ một hàm, một đối tượng tạm được dùng để thực hiện sự trả về sẽ làm hủy bộ nhớ (được cấp phát cho chuổi s) của đối tượng được gọi. Để tránh tình trạng này có thể sử dụng hàm tạo bản sao. Chương 2 Lớp , Đ ối tượng tính đóng gói 52 52 cout << neg( o ) << "\n"; // freeing... "Freeing p\n"; Chương 2 Lớp , Đ ối tượng tính đóng gói 62 62 có thể viết đầy đủ (ít dùng) t = c1. car:: sp_greater(t1); Bài tập VIII 1. Có 2 lớp pr1 pr2 đang dùng chung một máy in. Chương trình cần biết khi nào thì máy in được dùng bởi đối tượng nào thuộc một trong hai lớp đó. Hãy tạo hàm inuse() trả về giá trị đúng khi máy in đang được dùng giá trị sai khi ngược lại.... faster.\n"; return 0; } Caâu leänh t = c1.sp_greater(t1); Chương 2 Lớp , Đ ối tượng tính đóng gói 32 32 1/ Khái niệm Hàm tạo có thể có các tham số, chỉ cần bổ sung các tham số thích hợp trong khai báo lớp trong định nghóa hàm tạo. Khi khai báo một đối tượng, cần chỉ rõ các tham số này làm đối số. Ví dụ 3.1 Hàm tạo myclass(int x) có một tham soá #include <iostream.h>... một đối tượng kiểu stack. Cho hàm này hiển thị nội dung của ngăn xếp. 2. Tìm lỗi sai trong chương trình naøy #include <iostream.h> #include <stdlib.h> class dyna { int *p; public: Chương 2 Lớp , Đ ối tượng tính đóng gói 64 64 3. Dùng lớp stack, hãy viết hàm loadstack() để trả về một ngăn xếp đã được nạp vào các mẫu tự alphabet (a-z). Hãy gán ngăn xếp này cho một đối. .. myclass ob(4) ; ob.show(); return 0; } Giaù trị 4 trong khai báo đối tượng ob(4), là đối số được truyền cho tham số x của hàm tạo myclass(int x), dùng để khởi tạo biến a. Cách viết khác (dài hơn) myclass ob = myclass (4) ; Chương 2 Lớp , Đ ối tượng tính đóng gói 18 18 I/ Lớp (class) • Cú pháp khai báo lớp class class_name { private : // khai báo các biến ; // khai . Lớp, đối tượng và tính đóng gói • Lớp • Hàm tạo, hàm hủy • Tham số của hàm tạo • Nội tuyến tự động • Gán đối tượng • Truyền các đối tượng. hủy bỏ, chẳng hạn một đối tượng yêu cầu cấp phát bộ nhớ khi đối tượng được tạo ra và giải Chương 2 Lớp, Đối tượng và tính đóng gói

Ngày đăng: 21/08/2012, 15:34

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan