intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Nguyễn Thị Phương Phương | Ngày: | Loại File: PDF | Số trang:21

68
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Để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.

Chủ đề:
Lưu

Nội dung Text: Bài 12 - Các khái niệm nâng cao về Class

  1. Bài 12 CÁC KHÁI NI M NÂNG CAO V CLASS 1/21
  2. Hàm friend Đ 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); // ... }; 2/21
  3. Ví d 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
  4. Quá t i constructor 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 4/21
  5. #include int main() class timer{ { int seconds; timer a(10), b("20"), c(1, 10); public: a.run(); // count 10 seconds // seconds specified as a string b.run(); // count 20 seconds timer(char *t) { seconds = atoi(t); } c.run(); // count 1 minute, 10 seconds // seconds specified as integer return 0; 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
  6. T khóa this 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; Bên trong f( ), câu l nh gán cho i giá tr 10: void f() { ... }; i = 10; // ... Th c ra câu l nh trên là vi t t t c a : }; this->i = 10; 6/21
  7. #include 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
  8. Quá t i toán t 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 . 8/21
  9. Đ 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 } 9/21
  10. #include // Quá t i +. using namespace std; three_d three_d::operator+(three_d op2) class three_d { { int x, y, z; // 3-D coordinates three_d temp; public: temp.x = x + op2.x; //x chính là this->x three_d() { x = y = z = 0; } temp.y = y + op2.y; three_d(int i, int j, int k) {x = i; y = j; z = k; } temp.z = z + op2.z; return temp; three_d operator+(three_d op2); // op1 n } three_d operator=(three_d op2); // op1 n // Quá t i phép gán. void show() ; 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
  11. int main() { three_d a(1, 2, 3), b(10, 10, 10), c; a.show(); b.show(); c = a + b; // c ng a v i b r c.show(); c = a + b + c; // c ng a, b và c c.show(); c = b = a; // gán liên ti p c.show(); b.show(); return 0; } 11/21
  12. Tính th 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
  13. 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 hanghoa; public: void set_hanghoa(int size) { hanghoa = size; } int get_hanghoa() { return hanghoa; } void show(); }; 13/21
  14. // Define an automoble. #include class automobile : public road_vehicle { using namespace std; enum type car_type; // Define a base class for vehicles. public: class road_vehicle { void set_type(type t) { car_type = t; } int wheels; enum type get_type() { return car_type; } int passengers; void show(); public: }; void set_wheels(int num) { wheels = num; } void truck::show() int get_wheels() { return wheels; } { void set_pass(int num) { passengers = num; } cout
  15. void automobile::show() int main() { { cout
  16. Dùng thành viên đư c b o v Ngoài private, public, thành viên c a class còn đư c khai báo là protected Dùng protected có th t o các thành viên c a class là private đ i v i class c a chúng nhưng v n đư c th a k và đư c truy xu t b i các l p nh n th a k 16/21
  17. int main() #include { using namespace std; derived ob; class base { ob.set(2, 3); // derived hi u và dùng protected: ob.show(); // derived hi u và dùng int i, j; // private i v i base, nhưng có th ob.setk(); // ư c truy xu t v i derived ob.showk(); public: return 0; void set(int a, int b) { i = a; j = b; } } void show() { cout
  18. Đa hình Đa hình là thu t ng mô t m t 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
  19. { class B_class { B_class *p; char author[80]; B_class B_ob; public: D_class *dp; void put_author(char *s) { strcpy(author, s); } D_class D_ob; void show_author() { cout put_author("William Shakespeare"); strcpy(title, num); // M i author vào m t i tư ng thích h p } B_ob.show_author(); void show_title() { D_ob.show_author(); cout
  20. Hàm o: Hàm o là m t hàm đư c khai báo b ng t khóa virtual trong m t l p cơ s và đư c đ nh nghĩa l i trong m t hay nhi u l p th a k . 20/21
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2