Mục l ục -329- M M M M ụ ụ ụ ụ c c c c l l l l ụ ụ ụ ụ c c c c Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 1. 1. 1. 1. L L L L ậ ậ ậ ậ p p p p tr tr tr tr ì ì ì ì nh nh nh nh h h h h ớ ớ ớ ớ ng ng ng ng đố đố đố đố i i i i t t t t ợ ợ ợ ợ ng, ng, ng, ng, ph ph ph ph ơ ơ ơ ơ ng ng ng ng ph ph ph ph á á á á p p p p gi gi gi gi ả ả ả ả i i i i quy quy quy quy ế ế ế ế t t t t b b b b à à à à i i i i to to to to á á á á n n n n m m m m ớ ớ ớ ớ i i i i 1.Phơngpháplậptrình 1 2.Bàitoánquanhệgiađình 2 3.Lậptrìnhhớngđốitợng 6 3.1Mộtsốkháiniệm 7 3.2CácuđiểmcủaLTHĐT 8 3.3NhữngứngdụngcủaLTHĐT 9 4.Cácngônngữlậptrìnhhớngđốitợng 9 5.NgônngữlậptrìnhC++ 10 Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 2. 2. 2. 2. C C C C á á á á c c c c m m m m ở ở ở ở r r r r ộ ộ ộ ộ ng ng ng ng c c c c ủ ủ ủ ủ a a a a C++ C++ C++ C++ so so so so v v v v ớ ớ ớ ớ i i i i C C C C 1.CácđiểmkhôngtơngthíchgiữaC++vàANSIC 13 1.1Địnhnghĩahàm 13 1.2Khaibáohàmnguyênmẫu 13 1.3Sựtơngthíchgiữacontrỏ void vàcáccontrỏkhác 14 2.Cáckhảnăngvào/ramớicủaC++ 15 2.1Ghidữliệulênthiếtbịrachuẩn(mànhình) cout 15 2.2Cáckhảnăngviếtratrên cout 16 2.3Đọcdữliệutừthiếtbịvàochuẩn(bànphím ) cin 18 3.Nhữngtiệníchchongờilậptrình 19 3.1Chúthíchcuốidòng 19 3.2Khaibáomọinơi 20 3.3Toántửphạmvi :: 20 4.Hàminline 21 5.Thamchiếu 23 5.1Thamchiếutớimộtbiến 23 5.2Truyềnthamsốchohàmbằngthamchiếu 25 5.3Giátrịtrảvềcủahàmlàthamchiếu 28 6.Địnhnghĩachồnghàm(Overloadingfunctions) 29 Trờnghợpcáchàmcómộtthamsố 31 Mục l ục -330- Trờnghợpcáchàmcónhiềuthamsố 32 7.Thamsốngầmđịnhtronglờigọihàm 32 8.Bổsungthêmcáctoántửquảnlýbộnhớđộng:newvàdelete 35 8.1Toántửcấpphátbộnhớđộngnew 35 8.2Toántửgiảiphóngvùngnhớđộng delete 36 9.Tómtắt 38 9.1Ghinhớ 38 9.2Cáclỗithờnggặp 39 9.3Mộtsốthóiquenlậptrìnhtốt 39 10.Bàitập 39 Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 3. 3. 3. 3. Đố Đố Đố Đố i i i i t t t t ợ ợ ợ ợ ng ng ng ng v v v v à à à à l l l l ớ ớ ớ ớ p p p p 1.Đốitợng 40 2.Lớp 42 2.1Khaibáolớp 42 2.1.1Tạođốitợng 44 2.1.2Cácthànhphầndữliệu 45 2.1.3Cáchàmthànhphần 45 2.1.4Thamsốngầmđịnhtronglờigọihàmthànhphần 49 2.1.5Phạmvilớp 50 2.1.6Từkhoáxácđịnhthuộctínhtruyxuất 50 2.1.7Gọimộthàmthànhphầntrongmộthàmthànhphầnkhác 54 2.2Khảnăngcủacáchàmthànhphần 54 2.2.1Địnhnghĩachồngcáchàmthànhphần 54 2.2.2Cácthamsốvớigiátrịngầmđịnh 56 2.2.3Sửdụngđốitợngnhthamsốcủahàmthànhphần 57 2.2.4Contrỏthis 59 3.Phépgáncácđốitợng 59 4.Hàmthiếtlập(constructor)vàhàmhuỷbỏ(destructor) 60 4.1Hàmthiếtlập 60 4.1.1Chứcnăngcủahàmthiếtlập 60 Mục l ục -331- 4.1.2Mộtsốđặcđiểmquantrọngcủahàmthiếtlập 62 4.1.3Hàmthiếtlậpngầmđịnh 63 4.1.4Contrỏđốitợng 67 4.1.5Khaibáothamchiếuđốitợng 69 4.2Hàmhuỷbỏ 70 4.2.1Chứcnăngcủahàmhuỷbỏ 70 4.2.2Mộtsốquiđịnhđốivớihàmhuỷbỏ 71 4.3Sựcầnthiếtcủacáchàmthiếtlậpvàhuỷbỏ-lớpvectortrongkhônggiann chiều 72 4.4Hàmthiếtlậpsaochép( COPY CONSTRUCTOR ) 75 4.4.1Cáctìnhhuốngsửdụnghàmthiếtlậpsaochép 75 4.4.2Hàmthiếtlậpsaochépngầmđịnh 76 4.4.3Khaibáovàđịnhnghĩahàmthiếtlậpsaochéptờngminh 76 4.4.4Hàmthiếtlậpsaochépcholớpvector 79 5.Cácthànhphầntĩnh(static) 83 5.1Thànhphầndữliệustatic 83 5.2Khởitạocácthànhphầndữliệutĩnh 84 5.3Cáchàmthànhphầnstatic 86 6.Đốitợnghằng( CONSTANT ) 89 6.1Đốitợnghằng 89 6.2Hàmthànhphần const 89 7.Hàmbạnvàlớpbạn 89 7.1Đặtvấnđề 89 7.2Hàmtựdobạncủamộtlớp 90 7.3Cáckiểubạnbèkhác 92 7.3.1Hàmthànhphầncủalớplàbạncủalớpkhác 92 7.3.2Hàmbạncủanhiềulớp 93 7.3.3Tấtcảcáchàmcủalớplàbạncủalớpkhác 94 7.4Bàitoánnhânmatrậnvớivector 95 Giảiphápthứnhất-prodlàhàmbạntựdo 95 Giảiphápthứhai-prodlàhàmthànhphầncủalớpmatrixvàlàbạncủavect97 Mục l ục -332- 8.Vídụtổnghợp 98 9.Tómtắt 103 9.1Ghinhớ 103 9.2Cáclỗithờnggặp 104 9.3Mộtsốthóiquenlậptrìnhtốt 105 10.Bàitập 105 Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 4. 4. 4. 4. Đị Đị Đị Đị nh nh nh nh ngh ngh ngh ngh ĩ ĩ ĩ ĩ a a a a to to to to á á á á n n n n t t t t ử ử ử ử tr tr tr tr ê ê ê ê n n n n l l l l ớ ớ ớ ớ p p p p 1.Giớithiệuchung 109 2.Vídụtrênlớpsốphức 110 2.1Hàmtoántửlàhàmthànhphần 110 2.2Hàmtoántửlàhàmbạn 112 3.Khảnăngvàgiớihạncủađịnhnghĩachồngtoántử 122 PhầnlớntoántửtrongC++đềucóthểđịnhnghĩachồng 122 Trờnghợpcáctoántử++và 123 Lựachọngiữahàmthànhphầnvàhàmbạn 124 4.Chiếnlợcsửdụnghàmtoántử 124 Cácphéptoánmộtngôi 124 Cácphéptoánhaingôi 124 Cácphépgán 124 Toántửtruynhậpthànhphần-> 125 Toántửtruynhậpthànhphầntheochỉsố 125 Toántửgọihàm 125 5.Mộtsốvídụtiêubiểu 125 5.1Địnhnghĩachồngphépgán= 125 5.2Địnhnghĩachồngphép[]" 130 5.3Địnhnghĩachồng<<và>> 133 5.4Địnhnghĩachồngcáctoántử new và delete 135 5.5Phépnhânmatrậnvéctơ 137 6.Chuyểnđổikiểu 142 6.1Hàmtoántửchuyểnkiểuépbuộc 143 6.1.1Hàmtoántửchuyểnkiểutronglờigọihàm 145 Mục l ục -333- 6.1.2Hàmtoántửchuyểnkiểutrongbiểuthức 147 6.2Hàmtoántửchuyểnđổikiểucơsởsangkiểulớp 148 6.2.1Hàmthiếtlậptrongcácchuyểnđổikiểuliêntiếp 150 6.2.2Lựachọngiữahàmthiếtlậpvàphéptoángán 150 6.2.3Sửdụnghàmthiếtlậpđểmởrộngýnghĩamộtphéptoán 152 6.3Chuyểnđổikiểutừlớpnàysangmộtlớpkhác 154 6.3.1Hàmtoántửchuyểnkiểubắtbuộc 154 6.3.2Hàmthiếtlậpdùnglàmhàmtoántử 156 7.Tómtắt 157 7.1Ghinhớ 157 7.2Cáclỗithờnggặp 158 7.3Mộtsốthóiquenlậptrìnhtốt 158 8.Bàitập 158 Mục l ục -334- Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 5. 5. 5. 5. K K K K ỹ ỹ ỹ ỹ thu thu thu thu ậ ậ ậ ậ t t t t th th th th ừ ừ ừ ừ a a a a k k k k ế ế ế ế 1.Giớithiệuchung 161 2.Đơnthừakế 165 2.1Vídụminhhoạ 165 2.2Truynhậpcácthànhphầncủalớpcơsởtừlớpdẫnxuất 167 2.3Địnhnghĩalạicácthànhphầncủalớpcơsởtronglớpdẫnxuất 168 2.4Tínhthừakếtronglớpdẫnxuất 168 2.4.1Sựtơngthíchcủađốitợngthuộclớpdẫnxuấtvớiđốitợngthuộclớp cơsở168 2.4.2Tơngthíchgiữacontrỏlớpdẫnxuấtvàcontrỏlớpcơsở 170 2.4.3Tơngthíchgiữathamchiếulớpdẫnxuấtvàthamchiếulớpcơsở 172 2.5Hàmthiếtlậptronglớpdẫnxuất 174 2.5.1Hàmthiếtlậptronglớp 174 2.5.2Phâncấplờigọi 176 2.5.3Hàmthiếtlậpsaochép 177 2.6Cáckiểudẫnxuấtkhácnhau 181 2.6.1Dẫnxuấtpublic 182 2.6.2Dẫnxuấtprivate 182 2.6.3Dẫnxuấtprotected 182 Bảngtổngkếtcáckiểudẫnxuất 182 3.Hàmảovàtínhđahình 183 3.1Đặtvấnđề 183 3.2Tổngquátvềhàmảo 190 3.2.1Phạmvicủakhaibáovirtual 190 3.2.2Khôngnhấtthiếtphảiđịnhnghĩalạihàmvirtual 194 3.2.3Địnhnghĩachồnghàmảo 197 3.2.4Khaibáohàmảoởmộtlớpbấtkỳtrongsơđồthừakế 197 3.2.5Hàmhuỷbỏảo 201 3.3Lớptrừutợngvàhàmảothuầntuý 204 4.Đathừakế 205 4.1Đặtvấnđề 205 Mục l ục -335- 4.2Lớpcơsởảo 210 4.3Hàmthiếtlậpvàhuỷbỏ-vớilớpảo 213 4.4Danhsáchmócnốicácđốitợng 219 Xâydựnglớptrừutợng 219 4.5Tạodanhsáchmócnốikhôngđồngnhất 227 5.Tómtắt 231 5.1Ghinhớ 231 5.2Cáclỗithờnggặp 232 5.3Mộtsốthóiquenlậptrìnhtốt 232 6.Bàitập 232 Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 6. 6. 6. 6. Khu Khu Khu Khu ô ô ô ô n n n n h h h h ì ì ì ì nh nh nh nh 1.Khuônhìnhhàm 233 1.1Khuônhìnhhàmlàgì? 233 1.2Tạomộtkhuônhìnhhàm 233 1.3Sửdụngkhuônhìnhhàm 234 1.3.1Khuônhìnhhàmchokiểudữliệucơsở 234 1.3.2Khuônhìnhhàmminchokiểuchar* 235 1.3.3Khuônhìnhhàmminvớikiểudữliệulớp 236 1.4Cácthamsốkiểucủakhuônhìnhhàm 237 1.4.1Cácthamsốkiểutrongđịnhnghĩakhuônhìnhhàm 237 1.5Giảithuậtsảnsinhmộthàmthểhiện 240 1.6Khởitạocácbiếncókiểudữliệuchuẩn 241 1.7Cáchạnchếcủakhuônhìnhhàm 241 1.8Cácthamsốbiểuthứccủamộtkhuônhìnhhàm 242 1.9Địnhnghĩachồngcáckhuônhìnhhàm 244 1.10Cụthểhoácáchàmthểhiện 246 1.11Tổngkếtvềcáckhuônhìnhhàm 247 2.Khuônhìnhlớp 247 2.1Khuônhìnhlớplàgì? 247 2.2Tạomộtkhuônhìnhlớp 248 Mục l ục -336- 2.3Sửdụngkhuônhìnhlớp 249 2.4Vídụsửdụngkhuônhìnhlớp 250 2.5Cácthamsốtrongkhuônhìnhlớp 251 2.5.1Sốlợngcácthamsốkiểutrongmộtkhuônhìnhlớp 251 2.5.2Sảnsinhmộtlớpthểhiện 251 2.6Cácthamsốbiểuthứctrongkhuônhìnhlớp 252 2.7Tổngquátvềkhuônhìnhlớp 254 2.8Cụthểhoákhuônhìnhlớp 255 2.9Sựgiốngnhaucủacáclớpthểhiện 257 2.10Cáclớpthểhiệnvàcáckhaibáobạnbè 258 2.10.1Khaibáocáclớpbạnhoặccáchàmbạnthôngthờng 258 2.10.2Khaibáobạnbècủamộtthểhiệncủakhuônhìnhhàm,khuônhình lớp258 2.10.3Khaibáobạnbècủakhuônhìnhhàm,khuônhìnhlớp 259 2.11Vídụvềlớpbảngcóhaichỉsố 259 3.Tómtắt 263 3.1Ghinhớ 263 4.Bàitập 263 Ph Ph Ph Ph ụ ụ ụ ụ l l l l ụ ụ ụ ụ c c c c 1. 1. 1. 1. C C C C á á á á c c c c k k k k ê ê ê ê nh nh nh nh xu xu xu xu ấ ấ ấ ấ t t t t nh nh nh nh ậ ậ ậ ậ p p p p 1.Giớithiệuchung 265 1.1Kháiniệmvềkênh 265 1.2Thviệncáclớpvàora 265 2.Lớpostream 266 2.1Địnhnghĩachồngtoántử<<tronglớpostream 266 2.2Hàmput 266 2.3Hàmwrite 267 2.4Khảnăngđịnhdạng 267 2.4.1Chọncơsốthểhiện 267 2.4.2Đặtđộrộng 268 3.Lớpistream 270 Mục l ục -337- 3.1Địnhnghĩachồngtoántử>>tronglớpistream 270 3.2Hàmthànhphầnget 271 3.3Cáchàmthànhphầngetlinevàgcount 272 3.4Hàmthànhphầnread 272 3.5Mộtsốhàmkhác 273 4.Trạngtháilỗicủakênhnhập 273 4.1Cáccờlỗi 273 4.2Cácthaotáctrêncácbitlỗi 274 4.2.1Đọcgiátrị 274 4.2.2Thayđổitrạngtháilỗi 274 4.3Địnhnghĩacáctoántử()và! 274 5.Quảnlýđịnhdạng 275 5.1Trạngtháiđịnhdạngcủamộtdòng 275 5.2Từtrạngtháiđịnhdạng 276 5.3Thaotáctrêntrạngtháiđịnhdạng 277 5.3.1Cáctoántửthaotácđịnhdạngkhôngthamsố(TTĐDKTS) 278 5.3.2Cáctoántửđịnhdạngcóthamsố(TTĐDCTS) 278 5.3.3Cáchàmthànhphần 279 6.Liênkếtkênhxuất/nhậpvớimộttậptin 280 6.1Liênkếtxuấtvớimộttậptin 280 6.2Liênkếtkênhnhậpvớimộttậptin 282 6.3Cáckhảnăngtruynhậptrựctiếp 283 6.4Cácchếđộmởtậptinkhácnhau 286 Ph Ph Ph Ph ụ ụ ụ ụ l l l l ụ ụ ụ ụ c c c c 2. 2. 2. 2. X X X X ử ử ử ử l l l l ý ý ý ý l l l l ỗ ỗ ỗ ỗ i i i i 1.Bẫyvàbắtlỗi 287 2.Hoạtđộngcủachơngtrìnhkhimộtlỗiphátsinh 290 3.Xửlýlỗitronglớpứngdụng 293 Ph Ph Ph Ph ụ ụ ụ ụ l l l l ụ ụ ụ ụ c c c c 3. 3. 3. 3. B B B B à à à à i i i i to to to to á á á á n n n n quan quan quan quan h h h h ệ ệ ệ ệ gia gia gia gia đì đì đì đì nh nh nh nh Ph Ph Ph Ph ụ ụ ụ ụ l l l l ụ ụ ụ ụ c c c c 4. 4. 4. 4. M M M M ã ã ã ã ngu ngu ngu ngu ồ ồ ồ ồ n n n n b b b b à à à à i i i i to to to to á á á á n n n n quan quan quan quan h h h h ệ ệ ệ ệ gia gia gia gia đì đì đì đì nh nh nh nh . Mục l ục -3 2 9- M M M M ụ ụ ụ ụ c c c c l l l l ụ ụ ụ ụ c c c c Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 1. 1. 1. 1. L L L L ậ ậ ậ ậ p p p p tr tr tr tr ì ì ì ì nh nh nh nh h h h h ớ ớ ớ ớ ng ng ng ng đố đố đố đố i i i i t t t t ợ ợ ợ ợ ng, ng, ng, ng, ph ph ph ph ơ ơ ơ ơ ng ng ng ng ph ph ph ph á á á á p p p p gi gi gi gi ả ả ả ả i i i i quy quy quy quy ế ế ế ế t t t t b b b b à à à à i i i i to to to to á á á á n n n n m m m m ớ ớ ớ ớ i i i i 1.Phơngpháplậptrình 1 2.Bàitoánquanhệgiađình 2 3.Lậptrìnhhớngđốitợng 6 3.1Mộtsốkháiniệm 7 3.2CácuđiểmcủaLTHĐT 8 3.3NhữngứngdụngcủaLTHĐT 9 4.Cácngônngữlậptrìnhhớngđốitợng 9 5.NgônngữlậptrìnhC++ 10 Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 2. 2. 2. 2. C C C C á á á á c c c c m m m m ở ở ở ở r r r r ộ ộ ộ ộ ng ng ng ng c c c c ủ ủ ủ ủ a a a a C++ C++ C++ C++ so so so so v v v v ớ ớ ớ ớ i i i i C C C C 1.CácđiểmkhôngtơngthíchgiữaC++vàANSIC . 10 Ch Ch Ch Ch ơ ơ ơ ơ ng ng ng ng 2. 2. 2. 2. C C C C á á á á c c c c m m m m ở ở ở ở r r r r ộ ộ ộ ộ ng ng ng ng c c c c ủ ủ ủ ủ a a a a C++ C++ C++ C++ so so so so v v v v ớ ớ ớ ớ i i i i C C C C 1.CácđiểmkhôngtơngthíchgiữaC++vàANSIC 13 1.1Địnhnghĩahàm 13 1.2Khaibáohàmnguyênmẫu. 95 Giảiphápthứnhất-prodlàhàmbạntựdo 95 Giảiphápthứhai-prodlàhàmthànhphầncủalớpmatrixvàlàbạncủavect97 Mục l ục -3 3 2- 8.Vídụtổnghợp 98 9.Tómtắt 103 9.1Ghinhớ 103 9.2Cáclỗithờnggặp 104 9.3Mộtsốthóiquenlậptrìnhtốt