Tài liệu Tìm hiểu cách sử dụng từ khóa "Const" trong ngôn ngữ lập trình hướng đối tượng C++

pdf 13 trang hapham 910
Bạn đang xem tài liệu "Tài liệu Tìm hiểu cách sử dụng từ khóa "Const" trong ngôn ngữ lập trình hướng đối tượng C++", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftai_lieu_tim_hieu_cach_su_dung_tu_khoa_const_trong_ngon_ngu.pdf

Nội dung text: Tài liệu Tìm hiểu cách sử dụng từ khóa "Const" trong ngôn ngữ lập trình hướng đối tượng C++

  1. TÌM HI U CÁCH S D NG T KHĨA "CONST" TRONG NGƠN NG L P TRÌNH H ƯNG ð I T ƯNG C++
  2. MC L C A. N i Dung Trang 3 I. M đu Trang 3 II. H ng Trang 3 a. Khai báo h ng trong C++ Trang 3 III T khĩa const trong C++ Trang 4 1. T khĩa const v i con tr Trang 4 2. T khĩa const v i đ i t ưng Trang 5 a. H ng đ i t ưng Trang 5 b. Tham chi u h ng, con tr h ng Trang 5 c. Ph ươ ng th c h ng Trang 7 B. K T LU N Trang 10 Tài li u tham kh o Trang 10 1
  3. A. N I DUNG: I. M đ u Nh ư ta đã bi t, trong các đ i s ng c ũng nh ư trong m i l ĩnh v c, luơn cĩ các giá tr khơng th thay đ i g i là h ng s , Vd: s π v i 100 ch sơ th p phân: 3,1415926535897932384626433832795028841971693993751058209749445 923078164 062862089986280348253421170679 Vn đ là trong tin h c, c m i khi dùng đn giá tr π thì ch l c vi t h t t t c các ch s ??? II. Hng Nu dùng m t bi n đ l ưu tr giá tr c a h ng s thì cĩ m t v n đ là bi n thì thay đi đưc giá tr li. VD: float PI =3,14; ////// PI =8; ////// ðon mã trên khơng báo l i. Lo i l i này r t khĩ nh n th y nh ưng đ l i h u qu r t to l n. nu sau đĩ ta khơng chú ý c dùng bi n đĩ trên các đon mã c n s π, v y ta ph i dùng hng đ khai báo cho giá tr này. a. Khai báo h ng trong C++: Cĩ 2 cách khai báo h ng - Dùng ch th #define : #define A "gia tri" tác d ng: đnh ngh ĩa macro A đi di n cho giá tr dùng đ thay th A trong đon mã tr nh ng đon trong "" thành giá tr . ch th #define cịn cĩ nhi u tác d ng khác. - Dùng t khĩa const : const ki u tên_h ng =giá_trí; ki u const tên_h ng =giá_trí; VD: 2
  4. const int x=8; Tác d ng: Khai báo 1 h ng ki u int tên x cĩ giá tr b ng 8. Sau khi khai báo thì ta khơng th thay đ i x, ví d : x=8; //l i Câu l nh trên báo l i vì ta c g ng thay đ i 1 h ng s . III. T khĩa const trong C++ Nh ư ta đã bi t trên, t khĩa const dùng đ khai báo h ng: const ki u tên_h ng =giá_trí; ki u const tên_h ng =giá_trí; VD: const int x=8; int const y=4; Vn đ đây là hai cách khai báo này cĩ khác nhau khơng? Và t khĩa const cịn tác d ng nào khơng? Câu tr l i là cĩ. 1. T khĩa const v i con tr ði v i bi n con tr ta nên phân bi t hai điu: vùng nh con tr tr đ n và giá tr c a vùng nh đĩ. Vd: int x = 10, y = 20; const int * px = & x; Khai báo nh ư v y, giá tr c a vùng nh mà px đang tr đ n là khơng th thay đi đưc thơng qua thay đ i (*px). Do đĩ, ta cĩ các câu l nh sau: *px = 15; // l i px = & y; x = 15; Vì ta dùng *px đ thay đi giá tr c a vùng nh mà px đang tr đ n. Chú ý: Giá tr c a x v n cĩ th đưc thay đ i, ta ch khơng th thay đ i giá tr này thơng qua px. Nh ưng v i các khai báo sau: int x = 10, y = 20; int * const px = & x; Thì px khơng th thay đ i vùng nh đang tr đ n, nh ưng giá tr c a vùng nh cĩ th thay đi thơng qua px *px=y; 3
  5. *px =& y;//l i Vi khai báo sau: int x = 10; const int * const px = & x; Bn khơng th thay đ i n ơi px đang tr đ n và thơng qua (*px) c ũng khơng th thay đ i giá tr vùng nh đĩ. 2. T khĩa const v i đ i t ưng Gi s ta cĩ l p v i hàm t o sau: class A { int a; public : A(int t=0){ a=t;} // }; a. Hng đ i t ưng ð khai báo h ng đ i t ưng ta dùng t khĩa const nh ư sau: A const a(4); const A b; Ta khơng th thay đ i giá tr các thu c tính c a h ng đ i t ưng, k c thơng qua con tr tr khi dùng cách đc bi t. VD: ta cĩ hàm sau void A:: set (int x) { a=x; } Thì ta khơng th dùng hàm này đ thay đ i giá tr c a h ng đ i t ưng l p A. b. Tham chi u h ng, con tr h ng Gi s cĩ hàm cĩ đi t ưng đ u vào sau type C(A a) { //Các câu l nh } Mt đ i t ưng object s đưc t o và máy s copy tồn b giá tr c a a vào object r i x lý. V n đ phát sinh là khi ta cĩ m t class v i kích th ưc l n thì vi c chép giá tr vào tham s hình th c hàm s làm cho ch ươ ng trình tr nên ch m đi và đc bi t là s hao phí b nh và sau khi ra kh i hàm, b nh b hy khi đĩ s g i hàm h y, r t d d n đ n tình tr ng gi i phĩng l i vùng nh đã đưc gi phĩng. 4
  6. Vì v y ng ưi ta th ưng dùng tham s chuy n vào là con tr hay tham chi u: type C(A * a) { //Các câu l nh } ho c type C(A & a) { //Các câu l nh } Hàm trên s d ng tham s hình th c là mt bi n con tr và hàm d ưi dùng m t bi n tham chi u. Hai cách khai báo này s cho k t qu t ươ ng t nhau n u ta khơng dùng con tr đ tr vào đi t ưng khác trong khi dùng hàm. Khi này, v i l i g i hàm nh ư trên thì đa ch c a x s đưc truy n vào, do đĩ s tránh đưc vi c ph i chép c c u trúc v i kích th ưc l n. Nh ưng v i khai báo nh ư th thì giá tr c a bi n truy n vào cĩ th b thay đi thơng qua bi n object (vì là bi n con tr ho c tham chi u), trong khi vi cách khai báo nh ư c ũ thì ta khơng h mu n giá tr này b s a đ i chút nào. Do đĩ, t khĩa const đưc s dng: type C(const A * a) { //Các câu l nh } type C(const A & a) { //Các câu l nh } Lưu ý: 1. dng khai báo A const &a khơng cịn đưc khuy n khích. 2. Hàm tr v con tr cĩ th cĩ d ng const A* functionName (/*các đi s */ ); hay A const * functionName( /*các đi s */ ); hay const A const * functionName( /*các đi s */ ); Khi đĩ nĩ đưc hi u nh ư tr ưng h p con tr trên. c. Ph ươ ng th c h ng. trên ta đã nh c đ n ph ươ ng th c h ng, v y ph ươ ng th c h ng là gì? Tác d ng c a nĩ? 5
  7. Nh ư ta đã biêt, m t h ng đ i t ưng thì khơng th thay đ i các thu c tính c a nĩ và khơng đưc phép g i các ph ươ ng th c cĩ th làm thay đi các thu c tính c a nĩ, tr tr ưng h p đ c bi t: các thu c tính mutable . các ph ươ ng th c đưc các h ng đ i t ưng s d ng g i là ph ươ ng th c hng, hay nĩi cách khác, các h ng đ i t ưng ch làm vi c trên các ph ươ ng th c h ng. Gi s v i l p A cĩ m t ph ươ ng th c print () nh ư sau: class A { int a; public : A(int t=0){ a=t;} // void print (); }; void A:: print () { cout << a; } Ta th y ph ươ ng th c này khơng h làm thay đi các thu c tính c a a, Nh ưng nĩ khơng th làm vi c đưc v i h ng đ i t ưng. Gi s ta cĩ 2 câu l nh sau: const A a; a.print (); //////l i Vì sao trình d ch báo l i? Ta th y trong hàm print () khơng h cĩ l nh thay đ i thu c tính??? Lí do là trình d ch khơng th bi t đưc là ta cĩ thay đi thu c tính hay khơng ph ươ ng th c khơng h ng vì m t ph ươ ng th c khơng h ng cĩ th thay đi đưc thu c tính. Vy làm sao đ cĩ th cho hàm trên th c hi n đưc v i h ng đ i tưng? Ta ph i khai báo hàm print () là m t ph ươ ng th c h ng b ng cách thêm t khĩa const vào sau khai báo c a nĩ trong khai báo l p nh ư sau: void print () const ; Khi đĩ print () tr thành m t ph ươ ng th c h ng và l p A Cn đưc khai báo nh ư sau: class A { int a; 6
  8. public : A(int t=0){ a=t;} // void print () const ; }; Khi đĩ 2 câu l nh này s ch y đưc: const A a; a.print (); //////OK Nu ta thay đi m t thu c tính c a đ i t ưng thu c l p A thơng qua ph ươ ng th c print () thì s cĩ l i. VD: void A:: print () { cout << a; a=7; //////l i } Vì ta c g ng thay đ i thu c tính thơng qua ph ươ ng th c print () là m t ph ươ ng th c h ng. ðiu này khá hay trong mơi tr ưng làm vi c c ng tác. N u nhi u ng ưi cùng xây d ng m t l p: thì c n xác đ nh cái gì c n thay đ i, thay đ i b ng ph ươ ng th c nào? trên cĩ nh c đ n thu c tính mutable . Vy thu c tính này là gì? Ta đã bi t m t ph ươ ng th c h ng thì khơng đưc thay đ i các thu c tính c a đ i t ưng g i nĩ. nh ưng đơi khi c n ph i thay đ i các thu c tính này thơng qua ph ươ ng th c h ng, k c h ng đ i tưng, khi đĩ ch c n khai báo tr ưc thu c tính đĩ t khĩa mutable . Vy n u ta mu n cĩ m t ph ươ ng th c h ng tr v m t con tr khơng th thay đ i gi tr c a vùng nh , c ũng nh ư vùng nh mà con tr y đang tr ti, cĩ tham s đ u vào là m t con tr c ũng khơng th thay đ i gi tr c a vùng nh , và vùng nh mà nĩ tr t i thì ta cĩ m t câu l nh khai báo nh ư sau: const A const * functionName( const A const *) const ; //5 t const!! UPDATE trong C++ gi s cĩ hàm: type1 ham(type&);//khơng thay đi đ i s trong thân hàm nha Khi đĩ b n g i hàm nh ư sau Code: ham(6);////////loi 7
  9. Khi đĩ cĩ l i, vì sao? Vì 6 là 1 h ng. bn c n khai báo t ưng minh h ơn. Và khi đĩ c n thay đ i hàm này nh ư sau type1 ham(const type&);///////// khi đĩ l i g i hàm trên cĩ tác d ng 8
  10. B. K T LU N: T khĩa const trong lp trình nĩi chung và trong C++ nĩi riêng, đúng nh ư ý ngh ĩa c a nĩ trong các l ĩnh v c khác, là h ng, khơng đ i. Tuy nhiên khi dùng t khĩa này các hồn c nh khác nhau thì ý ngh ĩa ca chúng c ũng khác nhau, cho phép thay đ i m t ph n hay khơng cho thay đi hồn tồn mà vn khơng thay đ i ý ngh ĩa đ c thù c a t khĩa này. Trong quá trình làm tài li u này, khơng th tránh đưc các sai xĩt, mong m i ng ưi gĩp ý, hồn thi n thêm. 9
  11. Tài li u c a trungkien45 cviet.com, khi b n s d ng, vui lịng ghi rõ tác gi . 10
  12. Tài li u tham kh o 1. Th.s Nguy n Xuân ðài - Bài gi ng l p h ưng đ i t ưng 2. GS Ph m V ăn t - C++ Và Lp trình h ưng đ i t ưng - NXB KHKT - 1999 3. Th ư vi n MSDN ca Microsoft 4. Website congdongcviet.com 5. Website wikipedia.org 6. Website congdongso.com, v i url c th : 11
  13. Tài li u c a trungkien45 cviet.com, khi b n s dng, vui lịng ghi rõ tác gi , cm ơn. URL: 12