Chương 2: Lớp, đối tượng và tính đóng gói

Chia sẻ: Tran Vinh Phuc | Ngày: | Loại File: PDF | Số trang:51

0
97
lượt xem
18
download

Chương 2: Lớp, đối tượng và tính đóng gói

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nội dung chương 2 trình bày về các phần sau: Lớp; Hàm tạo, hàm thuỷ; 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. (Download về tài liệu không bị lỗi font)

Chủ đề:
Lưu

Nội dung Text: Chương 2: Lớp, đối tượng và tính đóng gói

  1. Chöông 2 Lôùp, ñoái töôïng vaø tính ñoùng goùi • Lôùp • Haøm taïo, haøm huûy • Tham soá cuûa haøm taïo • Noäi tuyeán töï ñoäng • Gaùn ñoái töôïng • Truyeàn caùc ñoái töôïng sang haøm • Traû ñoái töôïng töø haøm • Haøm friend
  2. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 17 17
  3. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 18 I/ Lôùp (class) • Cuù phaùp khai baùo lôùp class class_name { private : // khai baùo caùc bieán ; // khai baùo caùc haøm; public : // khai baùo caùc bieán ; // khai baùo caùc haøm; } objects_list ; class_name teân cuûa lôùp do ngöôøi duøng ñònh nghiaõ. objects_list danh saùch caùc ñoái töôïng, coù theå tuøy choïn. Caùc bieán, caùc haøm khai baùo beân trong moät lôùp goïi laø caùc thaønh vieân cuûa lôùp ñoù. Töø khoaù YÙ nghiaõ class khai baùo moät lôùp private : qui ñònh caùc bieán, caùc haøm laø caùc thaønh vieân rieâng cuûa lôùp, beân ngoaøi lôùp khoâng theå truy caäp ñöôïc. public : qui ñònh caùc bieán, caùc haøm laø caùc thaønh vieân chung cuûa lôùp, coù theå truy caäp chuùng töø caùc thaønh vieân khaùc cuûa lôùp vaø bôûi caùc thaønh phaàn khaùc cuûa chöông trình coù chöùa lôùp ñoù. • Cuù phaùp ñònh nghiaõ haøm thaønh vieân data_type class_name :: func_name (arg_list) { // body of function } data_type kieåu döõ lieäu cuûa phöông thöùc traû veà class_name teân lôùp chöùa haøm :: toaùn töû phaân giaûi phaïm vi (scope resolution operator) 18
  4. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 19 func_name teân haøm arg_list danh saùch caùc ñoái soá Ví duï 1.1 Khai baùo lôùp coù teâ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 nghiaõ haøm void set_a(int num) { a = num; } int myclass::get_a() // ñònh nghiaõ haøm int get_a() { return a; } int main() { myclass ob1, ob2; // khai baùo 2 ñoái töôïng coù teân ob1, ob2 ob1.set_a(10); // thieát laäp giaù trò 10 cho baûn sao cuaû bieán a cuûa ob1 ob2.set_a(99); // thieát laäp giaù trò 99 cho baûn sao cuaû bieán a cuûa ob2 cout
  5. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 20 Ví duï 1.2 Loãi bieân dòch khi truy caäp ñeán bieán rieâng a töø beân ngoaø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í duï 1.3 Khi a laø bieán chung, coù theå truy caäp a töø beân ngoaøi lôùp myclass #include 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
  6. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 21 Ví duï 1.4 Taïo lôùp stack duøng ñeå chöùa caùc kyù töï #include #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
  7. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 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
  8. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 23 Moãi ñoái töôïng cuûa moät lôùp coù baûn sao rieâng cuûa caùc bieán ñöôïc khai baùo trong lôùp. Baøi taäp I 1. Haõy taïo lôùp card ñeå giöõ caùc muïc nhaäp catalog theû thö vieän, chöaù töïa ñeà saùch (kieåu chuoãi), teân taùc giaû (kieåu chuoãi) vaø soá baûn (kieåu nguyeân). Duøng haøm thaønh vieân chung store() ñeå löu tröõ thoâng tin veà saùch vaø haøm thaønh vieân chung show() ñeå hieån thò thoâng tin. Vieát chöông trình thöïc hieän yeâu caàu treân. 2. Taïo lôùp haøng ñôïi (queue) ñeå giöõ haøng caùc soá nguyeân. Taïo moät kích thöôùc haøng daøi 100 soá nguyeân. Vieát chöông trình thöïc hieän yeâu caàu treân. II/ Haøm taïo & haøm huûy 1/ Khaùi nieäm Haøm taïo (constructor) coù cuøng teân vôùi lôùp, laø haøm thaønh phaàn cuûa moät lôùp, khoâng coù kieåu traû veà. Muïc ñích cuûa haøm taïo nhaèm taïo ra caùc khôûi ñaàu cho moät ñoái töôïng. Haøm taïo ñöôïc goïi töï ñoäng moãi khi ñoái töôïng cuûa lôùp ñoù ñöôïc taïo ra. 2/ Khai baùo class class_name { // khai baùo caùc bieán vaø haøm ; public : // khai baùo caùc bieán vaø haøm ; class_name() ; // khai baùo haøm taïo } objects_list ; Ví duï 2.1 Lôùp myclass coù haøm taïo myclass() vaø haøm show() #include 23
  9. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 24 class myclass { int a; public: myclass() ; // constructor void show(); }; myclass::myclass() // ñònh nghiaõ haøm taïo { cout
  10. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 25 phoùng boä nhôù khi ñoái töôïng bò huûy boû. Haøm huûy ñöôïc goïi töï ñoäng moãi khi ñoái töôïng cuûa lôùp ñoù bò huûy boû. 4/ Khai baùo class class_name { // khai baùo caùc bieán vaø haøm ; public : // khai baùo caùc bieán vaø haøm ; class_name(); // khai baùo haøm taïo ~class_name(); // khai baùo haøm huûy } objects_list ; Ví duï 2.2 Lôùp myclass coù haøm taïo myclass() vaø haøm huûy ~myclass() #include class myclass { int a; public: myclass(); // constructor ~myclass(); // destructor void show(); }; myclass::myclass() { cout
  11. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 26 void myclass::show() { cout
  12. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 27 stack::stack() { cout
  13. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 28 s2.push('y'); s1.push('c'); s2.push('z'); for(i=0; i
  14. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 29 exit(1); } *p = '\0'; len = 0; } // Free memory when destroying string object. strtype::~strtype() { cout = SIZE) { cout
  15. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 30 s2.show(); return 0; } Ví duï 2.5 Duøng ñoái töôïng cuûa lôùp timer ñeå xaùc ñònh khoaûng thôøi gian khi moät ñoái töôïng kieåu timer ñöôïc taïo vaø cho ñeán khi bò huûy. #include #include class timer { clock_t start; public: timer(); // constructor ~timer(); // destructor }; timer::timer() { start = clock(); } timer::~timer() { clock_t end; end = clock(); cout
  16. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 31 // delay ... cout > c; return 0; } Chöông trình naøy duøng haøm thö vieän chuaån clock() ñeå traû veà soá chu kyø ñoàng hoà xaûy ra töø khi chöông trình baét ñaàu chaïy. Chia giaù trò naøy cho haèng soá CLK-TCK ñeå chuyeån thaønh giaù trò giaây. (CLK-TCK ñònh nghiaõ soá tic-taéc cuûa ñoàng hoà trong moät giaây) Baøi taäp II 1. Thöïc hieän laïi lôùp queue trong baøi taäp I/ 2. chöông 2 ñeå thay haøm khôûi ñaàu baèng haøm taïo. 2. Taïo lôùp stopwatch ñeå so vôùi ñoàng hoà baám giôø trong vieäc xaùc ñònh thôøi gian troâi qua, ñöôïc tính baèng giaây. Caùc yeâu caàu : - Lôùp stopwatch coù 2 bieán rieâng start vaø end löu soá giaây - Vieát haøm taïo ñeå ñaït thôøi gian troâi qua luùc ñaàu veà zero. - Hai haøm thaønh vieân start() vaø stop() ñeå laàn löôït môû vaø taét cheá ñoä ñònh giôø. - Haøm thaønh vieân show() ñeå hieån thò thôøi gian troâi qua. - Vieát haøm huûy ñeå töï ñoäng hieån thò thôøi gian troâi qua khi ñoái töôïng stopwatch bò huûy. 3. Söûa loãi trong ñoaïn chöông trình sau : class sample { double a, b, c; public : double sample() ; } III/ Tham soá cuûa haøm taïo 31
  17. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 32 1/ Khaùi nieäm Haøm taïo coù theå coù caùc tham soá, chæ caàn boå sung caùc tham soá thích hôïp trong khai baùo lôùp vaø trong ñònh nghóa haøm taïo. Khi khai baùo moät ñoái töôïng, caàn chæ roõ caùc tham soá naøy laøm ñoái soá. Ví duï 3.1 Haøm taïo myclass(int x) coù moät tham soá #include class myclass { int a; public: myclass(int x); // constructor void show(); }; myclass::myclass(int x) { cout
  18. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 33 • Löu yù haøm huûy khoâng coù tham soá. Do khoâng coù cô cheá naøo ñeå truyeàn ñoái soá cho moät ñoái töôïng bò huûy. Ví duï 3.2 Coù theå truyeàn nhieàu tham soá cho haøm taïo #include class myclass { int a, b; public: myclass(int x, int y); // constructor void show(); }; myclass::myclass(int x, int y) { cout
  19. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 34 #include #define SIZE 10 // Declare a stack class for characters. class stack { char stck[SIZE]; // holds the stack int tos; // index of top-of-stack char who; // identifies stack public: stack(char c); // constructor void push(char ch); // push character on stack char pop(); // pop character from stack }; // Initialize the stack. stack::stack(char c) { tos = 0; who = c; cout
  20. Chöông 2 Lôùp, Ñoái töôïng vaø tính ñoùng goùi 35 cout

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản