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

Bài giảng Lý thuyết hệ điều hành - Chương 3

Chia sẻ: Nguyễn Nhi | Ngày: | Loại File: PDF | Số trang:41

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

LớP Ch-ơng này trình bày những vấn đề sau đây: Định nghĩa lớp Tạo lập đối t-ợng Truy nhập đến các thành phần của lớp Con trỏ đối t-ợng Con trỏ this Hàm bạn Dữ liệu thành phần tĩnh, hàm thành phần tĩnh Hàm tạo, hàm hủy Hàm tạo sao chép Lớp là khái niệm trung tâm của lập trình h-ớng đối t-ợng, nó là sự mở rộng của các khái niệm cấu trúc (struct) của C. Ngoài các thành phần dữ liệu, lớp còn chứa các thành phần hàm, còn gọi là ph-ơng thức (method) hoặc hàm thành viên...

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lý thuyết hệ điều hành - Chương 3

  1. CH−¬NG 3 LíP Ch−¬ng nµy tr×nh bµy nh÷ng vÊn ®Ò sau ®©y: §Þnh nghÜa líp T¹o lËp ®èi t−îng Truy nhËp ®Õn c¸c thµnh phÇn cña líp Con trá ®èi t−îng Con trá this Hµm b¹n D÷ liÖu thµnh phÇn tÜnh, hµm thµnh phÇn tÜnh Hµm t¹o, hµm hñy Hµm t¹o sao chÐp Líp lμ kh¸i niÖm trung t©m cña lËp tr×nh h−íng ®èi t−îng, nã lμ sù më réng cña c¸c kh¸i niÖm cÊu tróc (struct) cña C. Ngoμi c¸c thμnh phÇn d÷ liÖu, líp cßn chøa c¸c thμnh phÇn hμm, cßn gäi lμ ph−¬ng thøc (method) hoÆc hμm thμnh viªn (member function). Líp cã thÓ xem nh− mét kiÓu d÷ liÖu c¸c biÕn, m¶ng ®èi t−îng. Tõ mét líp ®· ®Þnh nghÜa, cã thÓ t¹o ra nhiÒu ®èi t−îng kh¸c nhau, mçi ®èi t−îng cã vïng nhí riªng. Ch−¬ng nμy sÏ tr×nh bμy c¸ch ®Þnh nghÜa líp, c¸ch x©y dùng ph−¬ng thøc, gi¶i thÝch vÒ ph¹m vi truy nhËp, sö dông c¸c thμnh phÇn cña líp, c¸ch khai b¸o biÕn, m¶ng cÊu tróc, lêi gäi tíi c¸c ph−¬ng thøc . 3.1. §Þnh nghÜa líp Có ph¸p: Líp ®−îc ®Þnh nghÜa theo mÉu : class tªn_líp { private: [Khai b¸o c¸c thuéc tÝnh] [§Þnh nghÜa c¸c hμm thμnh phÇn (ph−¬ng thøc)] public : [Khai b¸o c¸c thuéc tÝnh] [§Þnh nghÜa c¸c hμm thμnh phÇn (ph−¬ng thøc)] }; Thuéc tÝnh cña líp ®−îc gäi lμ d÷ liÖu thμnh phÇn vμ hμm ®−îc gäi lμ ph−¬ng thøc hoÆc hμm thμnh viªn. Thuéc tÝnh vμ hμm ®−îc gäi chung lμ c¸c thμnh phÇn cña líp. C¸c thμnh phÇn cña líp ®−îc tæ chøc thμnh hai vïng: vïng Lập trình HĐT 37 http://www.ebook.edu.vn
  2. së h÷u riªng (private) vμ vïng dïng chung (public) ®Ó quy ®Þnh ph¹m vi sö dông cña c¸c thμnh phÇn. NÕu kh«ng quy ®Þnh cô thÓ (kh«ng dïng c¸c tõ khãa private vμ public) th× C++ hiÓu ®ã lμ private. C¸c thμnh phÇn private chØ ®−îc sö dông bªn trong líp (trong th©n cña c¸c hμm thμnh phÇn). C¸c thμnh phÇn public ®−îc phÐp sö dông ë c¶ bªn trong vμ bªn ngoμi líp. C¸c hμm kh«ng ph¶i lμ hμm thμnh phÇn cña líp th× kh«ng ®−îc phÐp sö dông c¸c thμnh phÇn nμy. Khai b¸o c¸c thuéc tÝnh cña líp: ®−îc thùc hiÖn y nh− viÖc khai b¸o biÕn. Thuéc tÝnh cña líp kh«ng thÓ cã kiÓu chÝnh cña líp ®ã, nh−ng cã thÓ lμ kiÓu con trá cña líp nμy, VÝ dô: class A { A x; //Kh«ng cho phÐp, v× x cã kiÓu líp A A *p ; // Cho phÐp, v× p lμ con trá kiÓu líp A }; §Þnh nghÜa c¸c hµm thµnh phÇn: C¸c hμm thμnh phÇn cã thÓ ®−îc x©y dùng bªn ngoμi hoÆc bªn trong ®Þnh nghÜa líp. Th«ng th−êng, c¸c hμm thμnh phÇn ®¬n gi¶n, cã Ýt dßng lÖnh sÏ ®−îc viÕt bªn trong ®Þnh nghÜa líp, cßn c¸c hμm thμnh phÇn dμi th× viÕt bªn ngoμi ®Þnh nghÜa líp. C¸c hμm thμnh phÇn viÕt bªn trong ®Þnh nghÜa líp ®−îc viÕt nh− hμm th«ng th−êng. Khi ®Þnh nghÜa hμm thμnh phÇn ë bªn ngoμi líp, ta dïng có ph¸p sau ®©y: KiÓu_tr¶_vÒ_cña_hμm Tªn_líp::Tªn_hμm(khai b¸o c¸c tham sè) { [néi dung hμm] } To¸n tö :: ®−îc gäi lμ to¸n tö ph©n gi¶i miÒn x¸c ®Þnh, ®−îc dïng ®Ó chØ ra líp mμ hμm ®ã thuéc vμo. Trong th©n hμm thμnh phÇn, cã thÓ sö dông c¸c thuéc tÝnh cña líp, c¸c hμm thμnh phÇn kh¸c vμ c¸c hμm tù do trong ch−¬ng tr×nh. Chó ý : • C¸c thμnh phÇn d÷ liÖu khai b¸o lμ private nh»m b¶o ®¶m nguyªn lý che dÊu th«ng tin, b¶o vÖ an toμn d÷ liÖu cña líp, kh«ng cho phÐp c¸c hμm bªn ngoμi x©m nhËp vμo d÷ liÖu cña líp . • C¸c hμm thμnh phÇn khai b¸o lμ public cã thÓ ®−îc gäi tíi tõ c¸c hμm thμnh phÇn public kh¸c trong ch−¬ng tr×nh . Lập trình HĐT 38 http://www.ebook.edu.vn
  3. 3.2. T¹o lËp ®èi t−îng Sau khi ®Þnh nghÜa líp, ta cã thÓ khai b¸o c¸c biÕn thuéc kiÓu líp. C¸c biÕn nμy ®−îc gäi lμ c¸c ®èi t−îng. Có ph¸p khai b¸o biÕn ®èi t−îng nh− sau: Tªn_líp Danh_s¸ch_biÕn ; §èi t−îng còng cã thÓ khai b¸o khi ®Þnh nghÜa líp theo có ph¸p sau: class tªn_líp { ... } ; Mçi ®èi t−îng sau khi khai b¸o sÏ ®−îc cÊp ph¸t mét vïng nhí riªng ®Ó chøa c¸c thuéc tÝnh cña chóng. Kh«ng cã vïng nhí riªng ®Ó chøa c¸c hμm thμnh phÇn cho mçi ®èi t−îng. C¸c hμm thμnh phÇn sÏ ®−îc sö dông chung cho tÊt c¶ c¸c ®èi t−îng cïng líp. 3.3. Truy nhËp tíi c¸c thµnh phÇn cña líp • §Ó truy nhËp ®Õn d÷ liÖu thμnh phÇn cña líp, ta dïng có ph¸p: Tªn_®èi_t−îng. Tªn_thuéc_tÝnh CÇn chó ý r»ng d÷ liÖu thμnh phÇn riªng chØ cã thÓ ®−îc truy nhËp bëi nh÷ng hμm thμnh phÇn cña cïng mét líp, ®èi t−îng cña líp còng kh«ng thÓ truy nhËp. • §Ó sö dông c¸c hμm thμnh phÇn cña líp, ta dïng có ph¸p: Tªn_®èi_t−îng. Tªn_hμm (C¸c_khai_b¸o_tham_sè_thùc_sù) VÝ dô 3.1 #include #include class DIEM { private : int x,y ; public : void nhapsl( ) { cout >x>>y ; } Lập trình HĐT 39 http://www.ebook.edu.vn
  4. void hienthi( ) { cout
  5. getch(); } Chó ý: C¸c hμm tù do cã thÓ cã c¸c ®èi lμ ®èi t−îng nh−ng trong th©n hμm kh«ng thÓ truy nhËp ®Õn c¸c thuéc tÝnh cña líp. VÝ dô gi¶ sö ®· ®Þnh nghÜa líp : class DIEM { private : double x,y ; // toa do cua diem public : void nhapsl() { cout > x>>y ; } void in() { cout
  6. private: int dai; int rong; int cao; public: int get_thetich(int lth,int wdth = 2,int ht = 3); }; int Box::get_thetich(int l, int w, int h) { dai = l; rong = w; cao = h; cout
  7. VÝ dô 3.4 VÝ dô sau minh häa viÖc sö dông hμm inline trong líp: #include #include #include class phrase { private: char dongtu[10]; char danhtu[10]; char cumtu[25]; public: phrase(); inline void set_danhtu(char* in_danhtu); inline void set_dongtu(char* in_dongtu); inline char* get_phrase(void); }; void phrase::phrase() { strcpy(danhtu,""); strcpy(dongtu,""); strcpy(cumtu,""); } inline void phrase::set_danhtu(char* in_danhtu) { strcpy(danhtu, in_danhtu); } inline void phrase::set_dongtu(char* in_dongtu) { strcpy(dongtu, in_dongtu); } inline char* phrase::get_phrase(void) { strcpy(cumtu,dongtu); Lập trình HĐT 43 http://www.ebook.edu.vn
  8. strcat(cumtu," the "); strcat(cumtu,danhtu); return cumtu; } void main() { phrase text; cout
  9. }; void constants::print_it(const int data_value) { number = data_value; cout
  10. VÝ dô : Dïng líp DIEM, ta cã thÓ khai b¸o: DIEM *p1, *p2, *p3 ; // Khai b¸o 3 con trá p1, p2, p3 DIEM d1, d2 ; //Khai b¸o hai ®èi t−îng d1, d2 DIEM d [20] ; // Khai b¸o m¶ng ®èi t−îng Cã thÓ thùc hiÖn c©u lÖnh : p1 = &d2 ; //p1 chøa ®Þa chØ cña d2, p1 trá tíi d2 p2 =d ; // p2 trá tíi ®Çu m¶ng d p3 =new DIEM //t¹o mét ®èi t−îng vμ chøa ®Þa chØ cña nã vμo p3 §Ó truy xuÊt c¸c thμnh phÇn cña líp tõ con trá ®èi t−îng, ta viÕt nh− sau : Tªn_con_trá -> Tªn_thuéc_tÝnh Tªn_con_trá -> Tªn_hμm(c¸c tham sè thùc sù) NÕu con trá chøa ®Çu ®Þa chØ cña m¶ng, cã thÓ dïng con trá nh− tªn m¶ng. VÝ dô 3.6 #include #include class mhang { int maso; float gia; public: void getdata(int a, float b) {maso= a; gia= b;} void show() { cout
  11. { cout y; p -> getdata(x,y); p++;} for (i = 0; i this->x>>this->y ; } Lập trình HĐT 47 http://www.ebook.edu.vn
  12. Con trá this lμ ®èi thø nhÊt cña hμm thμnh phÇn. Khi mét lêi gäi hμm thμnh phÇn ®−îc ph¸t ra bëi mét ®èi t−îng th× tham sè truyÒn cho con trá this chÝnh lμ ®Þa chØ cña ®èi t−îng ®ã. VÝ dô: XÐt mét lêi gäi tíi hμm nhapsl() : DIEM d1 ; d1.nhapsl(); Trong tr−êng hîp nμy cña d1 th× this =&d1. Do ®ã this -> x chÝnh lμ d1.x vμ this-> y chÝnh lμ d1.y Chó ý: Ngoμi tham sè ®Æc biÖt this kh«ng xuÊt hiÖn mét c¸ch t−êng minh, hμm thμnh phÇn líp cã thÓ cã c¸c tham«1 kh¸c ®−îc khai b¸o nh− trong c¸c hμm th«ng th−êng. VÝ dô 3.7 #include #include class time { int h,m; public : void nhap(int h1, int m1) { h= h1; m = m1;} void hienthi(void) { cout
  13. ob2.nhap(5,40); ob3.tong(ob1,ob2); cout
  14. double f2 (...) { ... } C¸ch 2: Dïng tõ khãa friend ®Ó x©y dùng hμm trong ®Þnh nghÜa líp . MÉu viÕt nh− sau : class A { private : // Khai b¸o c¸c thuéc tÝnh public : ... // Khai b¸o c¸c hμm b¹n cña líp A void f1 (...) { ... } double f2 (...) { ... } }; Hµm b¹n cã nh÷ng tÝnh chÊt sau: - Hμm b¹n kh«ng ph¶i lμ hμm thμnh phÇn cña líp. - ViÖc truy nhËp tíi hμm b¹n ®−îc thùc hiÖn nh− hμm th«ng th−êng. - Trong th©n hμm b¹n cña mét líp cã thÓ truy nhËp tíi c¸c thuéc tÝnh cña ®èi t−îng thuéc líp nμy. §©y lμ sù kh¸c nhau duy nhÊt gi÷a hμm b¹n vμ hμm th«ng th−êng. - Mét hμm cã thÓ lμ b¹n cña nhiÒu líp. Lóc ®ã nã cã quyÒn truy nhËp tíi tÊt c¶ c¸c thuéc tÝnh cña c¸c ®èi t−îng trong c¸c líp nμy. §Ó lμm cho hμm f trë thμnh b¹n cña c¸c líp A, B vμ C ta sö dông mÈu viÕt sau : class B ; //Khai b¸o tr−íc líp A class B ; // Khai b¸o tr−íc líp B class C ; // Khai b¸o tr−íc líp C Lập trình HĐT 50 http://www.ebook.edu.vn
  15. // §Þnh nghÜa líp A class A { // Khai b¸o f lμ b¹n cña A friend void f(... ) }; // §Þnh nghÜa líp B class B { // Khai b¸o f lμ b¹n cña B friend void f(...) }; // §Þnh nghÜa líp C class C { // Khai b¸o f lμ b¹n cña C friend void f(...) }; // X©y dùng hμm f void f(...) { ... }; VÝ dô 3.8 #include #include class sophuc {float a,b; public : sophuc() {} sophuc(float x, float y) {a=x; b=y;} friend sophuc tong(sophuc,sophuc); friend void hienthi(sophuc); }; sophuc tong(sophuc c1,sophuc c2) Lập trình HĐT 51 http://www.ebook.edu.vn
  16. {sophuc c3; c3.a=c1.a + c2.a ; c3.b=c1.b + c2.b ; return (c3); } void hienthi(sophuc c) {cout
  17. { cout
  18. } Ch−¬ng tr×nh cho kÕt qu¶ nh− sau: Gia tri ban dau : 150 200 Gia tri sau khi thay doi: 200 150 3.7. D÷ liÖu thµnh phÇn tÜnh vµ hµm thµnh phÇn tÜnh 3.7.1. D÷ liÖu thµnh phÇn tÜnh D÷ liÖu thμnh phÇn tÜnh ®−îc khai b¸o b»ng tõ kho¸ static vμ ®−îc cÊp ph¸t mét vïng nhÝ cè ®Þnh, nã tån t¹i ngay c¶ khi líp ch−a cã mét ®èi t−îng nμo c¶. D÷ liÖu thμnh phÇn tÜnh lμ chung cho c¶ líp, nã kh«ng ph¶i lμ riªng cña mçi ®èi t−îng, vÝ dô: class A { private: static int ts; // Thμnh phÇn tÜnh int x; ... }; A u, v; // Khai b¸o 2 ®èi t−îng Gi÷a c¸c thμnh phÇn x vμ ts cã sù kh¸c nhau nh− sau: u.x vμ v.x cã 2 vïng nhí kh¸c nhau, trong khi u.ts vμ v.ts chØ lμ mét, chóng cïng biÓu thÞ mét vïng nhí, thμnh phÇn ts tån t¹i ngay khi u vμ v ch−a khai b¸o. §Ó biÓu thÞ thμnh phÇn tÜnh, ta cã thÓ dïng tªn líp, vÝ dô: A::ts Khai b¸o vµ khëi g¸n gi¸ trÞ cho thµnh phÇn tÜnh: Thμnh phÇn tÜnh sÏ ®−îc cÊp ph¸t bé nhí vμ khëi g¸n gi¸ trÞ ®Çu b»ng mét c©u lÖnh khai b¸o ®Æt sau ®Þnh nghÜa líp theo mÉu nh− sau: int A::ts; // Khëi g¸n cho ts gi¸ trÞ 0 int A::ts = 1234; // Khëi g¸n cho ts gi¸ trÞ 1234 Chó ý: Khi ch−a khai b¸o th× thμnh phÇn tÜnh ch−a tån t¹i. H·y xem ch−¬ng tr×nh sau: VÝ dô 3.10 Lập trình HĐT 54 http://www.ebook.edu.vn
  19. #include #include class HDBH { private: char *tenhang; double tienban; static int tshd; static double tstienban; public: static void in() { cout
  20. double tienban; static int tshd; static double tstienban; public: static void in() { cout
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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