Bài 12 - Các khái niệm nâng cao về Class doc

21 381 0
Bài 12 - Các khái niệm nâng cao về Class doc

Đ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

1/21 Bài 12 CÁC KHÁI NIỆM NÂNG CAO VỀ CLASS Hàm friend 2/21  Để một hàm không phải thành viên truy xuất được các thành viên riêng của lớp phải khai báo bằng từ khóa friend.  Cần khai báo prototype của hàm bạn trong phần public của class. Ví dụ class cl { // public: friend void frnd(cl ob); // }; 3/21 class myclass { int a, b; public: myclass(int i, int j) { a=i; b=j; } friend int sum(myclass x); // sum() is a friend of myclass }; int sum(myclass x) { return x.a + x.b; } int main() { myclass n(3, 4); cout << sum(n); return 0; } Ví dụ Quá tải constructor 4/21  Dùng hàm tạo ở những dạng khác.  Để quá tải hàm tạo chỉ việc khai báo dạng mà nó nhận và định nghĩa mỗi hành động liên hệ với những dạng này.  Ví dụ 5/21 #include <ctime> class timer{ int seconds; public: // seconds specified as a string timer(char *t) { seconds = atoi(t); } // seconds specified as integer timer(int t) { seconds = t; } // time specified in minutes and seconds timer(int min, int sec) { seconds = min*60 + sec; } void run(); } ; void timer::run() { clock_t t1; t1 = clock(); while((clock()/CLOCKS_PER_SEC - t1/CLOCKS_PER_SEC) < seconds); cout << "\a"; // ring the bell } int main() { timer a(10), b("20"), c(1, 10); a.run(); // count 10 seconds b.run(); // count 20 seconds c.run(); // count 1 minute, 10 seconds return 0; } Từ khóa this 6/21  Mỗi khi một hàm thành viên được gọi nó được truyền một con trỏ chỉ đến đối tượng gọi hàm.  Con trỏ this là một tham số không tường minh đối với tất cả các hàm thành viên, vì vậy trong hàm thành viên this có thể được dùng để tham chiếu đến đối tượng gọi nó. class cl { int i; void f() { }; // }; Bên trong f( ), câu lệnh gán cho i giá trị 10: i = 10; Thực ra câu lệnh trên là viết tắt của : this->i = 10; 7/21 #include <iostream> using namespace std; class cl { int i; public: void load_i(int val) { this->i = val; } // same as i = val int get_i() { return this->i; } // same as return i } ; int main() { cl o; o.load_i(100); cout << o.get_i(); return 0; } Quá tải toán tử 8/21  C++ cho phép quá tải toán tử liên hệ với các kiểu class.  Quá tải toán tử cho phép định nghĩa ý nghĩa của một toán tử cho một class đặc biệt.  Ví dụ một class định nghĩa một danh sách liên kết có thể dùng toán tử + để thêm một đối tượng vào danh sách.  Quá tải một toán tử chỉ đơn giản là định nghĩa một toán tử mới liên hệ với một class mà không làm thay đổi ý nghĩa gốc của một toán tử. 9/21  Để quá tải một toán tử cần định nghĩa ý nghĩa nào của toán tử liên hệ với class. Tạo một hàm operator, định nghĩa hành vi của toán tử  Dạng tổng quát Kiểu Tên lớp::operator Toán tử(Danh sách tham số) { Hành vi liên hệ với class } 10/21 #include <iostream> using namespace std; class three_d { int x, y, z; // 3-D coordinates public: three_d() { x = y = z = 0; } three_d(int i, int j, int k) {x = i; y = j; z = k; } three_d operator+(three_d op2); // op1 ẩn three_d operator=(three_d op2); // op1ẩn void show() ; }; // Quá tải +. three_d three_d::operator+(three_d op2) { three_d temp; temp.x = x + op2.x; //x chính là this->x temp.y = y + op2.y; temp.z = z + op2.z; return temp; } // Quá tải phép gán. three_d three_d::operator=(three_d op2) { x = op2.x; y = op2.y; z = op2.z; return *this;//trả về đối tượng được trỏ bởi this } void three_d::show() { cout << x << ", "; cout << y << ", "; cout << z << "\n"; } [...]... a k C++ h tr tính th a k b ng cách cho phép m t class h p nh t v i class khác trong khai báo Khai báo: class Tên class nh n th a k : Tên class cho th a k { Thân class nh n th a k } 12/ 21 class xe { int banh; int nguoi; public: void set_banh(int num) { banh = num; } int get_banh() { return banh; } void set_ng(int num) { nguoi = num; } int get_ng() { return nguoi; } }; class xe_tai : public xe { int... } }; 19/21 { B _class *p; B _class B_ob; D _class *dp; D _class D_ob; p = &B_ob; // địa chỉ của base // truy xuất B _class qua pointer p->put_author("Tom Clancy"); // truy xuất D _class qua base pointer p = &D_ob; p->put_author("William Shakespeare"); // Mỗi author vào một đối tượng thích hợp B_ob.show_author(); D_ob.show_author(); cout put_title("The Tempest"); p->show_author();... quá trình trong đó các hi n th c khác nhau c a hàm có th đư c truy xu t qua cùng m t tên "M t giao ti p, Đa phương th c" Các con tr ch đ n các ki u th a k Con tr l p cơ s và con tr l p th a k đư c liên h v i nhau 18/21 class B _class { char author[80]; public: void put_author(char *s) { strcpy(author, s); } void show_author() { cout . 1/21 Bài 12 CÁC KHÁI NIỆM NÂNG CAO VỀ CLASS Hàm friend 2/21  Để một hàm không phải thành viên truy xuất được các thành viên riêng của. kế 12/ 21  C++ hỗ trợ tính thừa kế bằng cách cho phép một class hợp nhất với class khác trong khai báo.  Khai báo: class Tên class nhận thừa kế : Tên class

Ngày đăng: 19/03/2014, 08:20

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan