Sách Ngôn ngữ lập trình c++ full pdf
H C VI N CƠNG NGH B U CHÍNH VI N THƠNG NGƠN NG L P TRÌNH C++ (Dùng cho sinh viên h đào t o đ i h c t xa) L u hành n i b HÀ N I - 2006 NGƠN NG L P TRÌNH C++ PGS.TS Tr n ình Qu KS Nguy n M nh Hùng L p trình nâng cao v i C++ L p trình h ng đ i t ng v i C++ GI I THI U C++ ngôn ng l p trình h ng đ i t ng đ c m r ng t ngôn ng C Do v y, C++ có u m k th a đ c m m nh truy n th ng c a ngôn ng C nh uy n chuy n, t ng thích v i thi t b ph n c ng Hi n nay, C++ m t ngơn ng l p trình ph bi n, đ c gi ng d y t i tr ng đ i h c n c th gi i đ c bi t đ c s d ng r ng rãi cho nhu c u phát tri n c a công nghi p ph n m m hi n Tài li u không nh ng nh m gi i thi u cho sinh viên ngôn ng l p trình C++, mà cịn mong mu n qua sinh viên có th hi u đ c t t ng c a ph ng pháp l p trình h ng đ i t ng nói chung N i dung c a tài li u bao g m hai ph n chính: • Ph n th nh t l p trình nâng cao v i C++, bao g m l p trình C++ v i tr m ng, ki u d li u có c u trúc thao tác vào t p • Ph n th hai l p trình h ng đ i t ng v i C++, bao g m đ nh ngh a thao tác l p đ i t ng, tính k th a t ng ng b i C++, cách s d ng m t s l p c b n th vi n C++ N i dung tài li u đ Ch c t ch c thành ch ng: ng 1: Gi i thi u t ng quan v ph ng pháp l p trình Trình bày ph ng pháp l p trình n tính, l p trình c u trúc đ c bi t, làm quen v i khái ni m l p trình h ng đ i t ng Ch ng 2: Con tr m ng Trình bày cách khai báo s d ng ki u tr m ng ngôn ng C++ Ch ng 3: Ki u d li u có c u trúc Trình bày cách bi u di n cài đ t m t s ki u c u trúc d li u tr u t ng C++ Sau đó, trình bày cách áp d ng ki u d li u ng d ng c th Ch ng 4: Vào t p Trình bày thao tác đ c, ghi d li u t p tin khác nhau: t p tin v n b n t p tin nh phân Trình bày cách truy nh p t p tin tr c ti p Ch ng 5: L p đ i t ng Trình bày khái ni m m đ u cho l p trình h ng đ i t ng C++, bao g m cách khai báo s d ng l p, thu c tính c a l p; cách kh i t o hu b đ i t ng, quy t c truy nh p đ n thành ph n c a l p Ch ng 6: Tính k th a t ng ng b i Trình bày cách th c k th a gi a l p C++, nguyên t c truy nh p k th a, đ nh ngh a n p ch ng ph ng th c tính đa hình l p trình h ng đ i t ng v i C++ Ch ng 7: M t s l p quan tr ng Trình bày cách s d ng m t s l p có s n th vi n chu n c a C++, bao g m l p: l p t p h p, l p chu i, l p ng n x p, l p hàng đ i l p danh sách liên k t đ c đ c cu n sách này, sinh viên ph i quen bi t khái ni m c b n v l p trình, có m t s k n ng l p trình v i ngôn ng C ho c C++ Cu n sách c ng có th dùng tài li u tham kh o cho nh ng sinh viên mu n tìm hi u k thu t l p trình nâng cao l p trình h ng đ i t ng v i C++ Cu n sách có kèm theo m t đ a ch l y làm minh ho t p cu n sách ng trình ch a tồn b ch ng trình đ c M c dù tác gi có nhi u c g ng vi c biên so n tài li u này, song không th tránh kh i nh ng thi u sót R t mong nh n đ c nh ng ý ki n đóng góp quý báu t sinh viên b n đ ng nghi p Ch ng 1: Gi i thi u v ph ng pháp l p trình CH NG GI I THI U V CÁC PH N i dung c a ch ng t p trung trình bày ph • Ph ng pháp l p trình n tính • Ph ng pháp l p trình h ng c u trúc • Ph ng pháp l p trình h ng đ i t NG PHÁP L P TRÌNH ng pháp l p trình: ng 1.1 L P TRÌNH TUY N TÍNH c tr ng c b n c a l p trình n tính t theo l i tu n t Ch ng trình s đ c th c hi n theo th t t đ u đ n cu i, l nh k ti p l nh cho đ n k t thúc ch ng trình c tr ng L p trình n tính có hai đ c tr ng: • • n gi n: ch ng trình đ c ti n hành đ n gi n theo l i tu n t , không ph c t p n lu ng: ch có m t lu ng cơng vi c nh t, công vi c đ lu ng c th c hi n tu n t Tính ch t • u m: Do tính đ n gi n, l p trình n tính đ gi n có u m d hi u • Nh c m: V i ng d ng ph c t p, ng gi i quy t c ng d ng cho ch ng trình đ n i ta khơng th dùng l p trình n tính đ Ngày nay, l p trình n tính ch t n t i ph m vi modul nh nh t c a ph ng pháp l p trình khác Ví d m t ch ng trình c a l p trình c u trúc, l nh c ng đ c th c hi n theo tu n t t đ u đ n cu i ch ng trình 1.2 L P TRÌNH H 1.2.1 NG C U TRÚC c tr ng c a l p trình h ng c u trúc Trong l p trình h ng c u trúc, ch ng trình đ c chia nh thành ch ng trình m i ch ng trình th c hi n m t công vi c xác đ nh Ch ng trình s g i đ n ch ng trình theo m t gi i thu t, ho c m t c u trúc đ c xác đ nh ch ng trình Các ngơn ng l p trình c u trúc ph bi n Pascal, C C++ Riêng C++ vi c có đ c tr ng c a l p trình c u trúc k th a t C, cịn có đ c tr ng c a l p trình h ng đ i t ng Cho nên C++ cịn đ c g i ngơn ng l p trình n a c u trúc, n a h ng đ i t ng c tr ng c tr ng c b n nh t c a l p trình c u trúc th hi n m i quan h : Ch ng 1: Gi i thi u v ph Ch ng pháp l p trình ng trình = C u trúc d li u + Gi i thu t Trong đó: • C u trúc d li u cách t ch c d li u cho vi c x lý b i m t hay nhi u ch • Gi i thu t m t quy trình đ th c hi n m t công vi c xác đ nh Trong ch ng trình ng trình, gi i thu t có quan h ph thu c vào c u trúc d li u: • M t c u trúc d li u ch phù h p v i m t s h n ch gi i thu t • N u thay đ i c u trúc d li u ph i thay đ i gi i thu t cho phù h p • M t gi i thu t th ng ph i kèm v i m t c u trúc d li u nh t đ nh Tính ch t ng trình có th đ • M i ch • Các ch ng trình có th đ c g i đ n đ th c hi n theo m t th t b t kì, tu thu c vào gi i thu t ch ng trình mà khơng ph thu c vào th t khai báo c a ch ng trình • Các ngơn ng l p trình c u trúc cung c p m t s c u trúc l nh u n ch c g i th c hi n nhi u l n m t ch ng trình ng trình u m • Ch • T gi i thu t rõ ràng ng trình sáng s a, d hi u, d theo dõi c m Nh • L p trình c u trúc không h tr m nh vi c s d ng l i mã ngu n: Gi i thu t ph thu c ch t ch vào c u trúc d li u, đó, thay đ i c u trúc d li u, ph i thay đ i gi i thu t, ngh a ph i vi t l i ch ng trình • Khơng phù h p v i ph n m m l n: t c u trúc v i gi i thu t ch phù h p v i toán nh , n m ph m vi m t modul c a ch ng trình V i d án ph n m m l n, l p trình c u trúc t khơng hi u qu vi c gi i quy t m i quan h v mô gi a modul c a ph n m m V nđ V n đ c b n c a l p trình c u trúc b ng cách đ phân chia ch ng trình thành ch ng trình cho phù h p v i yêu c u, ch c n ng m c đích c a m i tốn Thơng th ng, đ phân rã tốn l p trình c u trúc, ng i ta s d ng ph ng pháp thi t k xu ng (top-down) 1.2.2 Ph ng pháp thi t k xu ng (top-down) Ph ng pháp thi t k top-down ti p c n toán theo h ng t xu ng d i, t t ng qúat đ n chi ti t Theo đó, m t tốn đ c chia thành toán nh h n M i toán l i đ c chia nh ti p, n u có th , thành tốn nh h n n a Q trình cịn đ c g i q trình làm m n d n Quá trình s d ng l i tốn khơng c n chia nh thêm Ch ng 1: Gi i thi u v ph ng pháp l p trình n a Ngh a m i toán đ u có th gi i quy t b ng m t ch thu t đ n gi n ng trình v i m t gi i Ví d , s d ng ph ng pháp top-down đ gi i quy t toán xây m t c n nhà m i Chúng ta có th phân rã tốn theo b c nh sau: • m c th nh t, chia toán xây nhà thành tốn nh h n nh làm móng, đ c t, đ tr n, xây t ng, l p mái • m c th hai, phân rã công vi c m c th nh t nh vi c làm móng nhà có th phân rã ti p thành cơng vi c đào móng, gia c n n, làm khung s t, đ bê tong; công vi c đ c t đ c ph n rã thành … • m c th ba, phân rã công vi c c a m c th hai nh vi c đào móng có th phân chia ti p thành cơng vi c nh đo đ c, c m m c, ch ng dây, đào ki m tra móng Vi c gia c n n đ c phân rã thành … Q trình phân rã có th d ng m c này, b i cơng vi c thu đ c nh đo đ c, c m m c, ch ng dây, đào… có th th c hi n đ c ngay, không c n chia nh thêm n a L u ý: • Cùng s d ng ph ng pháp top-down v i m t tốn, nh ng có th cho nhi u k t qu khác Nguyên nhân s khác tiêu chí đ phân rã m t tốn thành tốn Ví d , v n áp d ng ph ng pháp top-down đ gi i quy t toán xây nhà, nh ng n u s d ng m t cách khác đ phân chia tốn, ta có th thu đ c k t qu khác bi t so v i ph ng pháp ban đ u: • m c th nh t, chia toán xây nhà thành toán nh h n nh làm ph n g , làm ph n s t, làm ph n bê tông làm ph n g ch • m c th hai, phân rã công vi c m c th nh t làm ph n g có th chia thành công vi c nh x g , gia công g , t o khung, l p vào nhà Vi c làm s t có th chia nh thành… Rõ ràng, v i cách làm m n th này, ta s thu đ hi n ph n 1.3 L P TRÌNH H 1.3.1 L p trình h Trong l p trình h NG ng đ i t ng đ i t IT c m t k t qu khác h n v i cách th c th c NG ng ng: ng trình đ i t ng sau tr u t ng hố đ i • Ng i ta coi th c th ch t ng thành l p đ i t ng • D li u đ c t ch c thành thu c tính c a l p Ngu i ta ng n ch n vi c thay đ i tu ti n d li u ch ng trình b ng cách gi i h n truy nh p nh ch cho phép truy nh p d li u thông qua đ i t ng, thông qua ph ng th c mà đ i t ng đ c cung c p… • Quan h gi a đ i t ng quan h ngang hàng ho c quan h k th a: N u l p B k th a t l p A A đ c g i l p c s B đ c g i l p d n xu t Ch ng 1: Gi i thi u v ph ng pháp l p trình Ngơn ng l p trình h ng đ i t ng ph bi n hi n Java, C++, C# M c dù C++ c ng có nh ng đ c tr ng c b n c a l p trình h ng đ i t ng nh ng v n khơng ph i ngơn ng l p trình thu n h ng đ i t ng c tr ng L p trình h ng đ i t ng có hai đ c tr ng c b n: • óng gói d li u: d li u ln đ c t ch c thành thu c tính c a l p đ i t truy nh p đ n d li u ph i thông qua ph ng th c c a đ i t ng l p • S d ng l i mã ngu n: vi c s d ng l i mã ngu n đ c th hi n thông qua c ch k th a C ch cho phép l p đ i t ng có th k th a t l p đ i t ng khác Khi đó, l p d n xu t, có th s d ng ph ng th c (mã ngu n) c a l p c s mà không c n ph i đ nh ngh a l i ng Vi c u m L p trình h ng đ i t ng có m t s u m n i b t: • Khơng cịn nguy c d li u b thay đ i t ch ng trình Vì d li u đ c đóng gói vào đ i t ng N u mu n truy nh p vào d li u ph i thông qua ph ng th c đ c cho phép c a đ i t ng • Khi thay đ i c u trúc d li u c a m t đ i t ng, không c n thay đ i mã ngu n c a đ i t ng khác, mà ch c n thay đ i m t s thành ph n c a đ i t ng d n xu t i u h n ch s nh h ng x u c a vi c thay đ i d li u đ n đ i t ng khác ch ng trình • Có th s d ng l i mã ngu n, ti t ki m tài nguyên, chi phí th i gian Vì nguyên t c k th a cho phép l p d n xu t s d ng ph ng th c t l p c s nh nh ng ph ng th c c a nó, mà khơng c n thi t ph i đ nh ngh a l i • Phù h p v i d án ph n m m l n, ph c t p 1.3.2 M t s khái ni m c b n Trong m c này, s làm quen v i m t s khái ni m c b n l p trình h t ng Bao g m: • Khái ni m đ i t • Khái ni m đóng gói d li u (encapsulation) • Khái ni m k th a (inheritance) • Khái ni m đa hình (polymorphism) it ng đ i ng (object) ng (Object) Trong l p trình h ng đ i t ng, đ i t ng đ c coi đ n v c b n nh nh t Các d di u cách x lí ch thành ph n c a đ i t ng mà không đ c coi th c th M t đ i t ng ch a d li u c a riêng nó, đ ng th i có ph ng th c (hành đ ng) thao tác d li u đó: it ng = d li u + ph ng th c Ch ng 1: Gi i thi u v ph ng pháp l p trình L p (Class) Khi có nhi u đ i t ng gi ng v m t d li u ph g i chung l p: • • L p s tr u t it ng hoá c a đ i t ng th c, chúng đ c nhóm l i v i ng ng m t th hi n c a l p óng gói d li u (Encapsulation) • Các d li u đ riêng c đóng gói vào đ i t • Khơng th truy nh p đ n d li u m t cách t nh l p trình c u trúc • Mu n truy nh p đ n d li u đ c b o v , ph i thông qua đ i t ng, ngh a ph i s d ng ph ng th c mà đ i t ng cung c p m i có th truy nh p đ n d li u c a đ i t ng ng M i d li u có m t ph m vi truy nh p Tuy nhiên, C++ ch ngơn ng l p trình n a đ i t ng, C++ v n cho phép đ nh ngh a bi n d li u hàm t do, k t qu k th a t ngôn ng C, m t ngôn ng l p trình thu n c u trúc K th a (Inheritance) Tính k th a c a l p trình h ng đ i t ng cho phép m t l p có th k t i Khi đó, l p m i có th s d ng d li u ph ng th c c a l Ngoài ra, l p d n xu t cịn có th b sung thêm m t s d li u ph th a thay đ i d li u c a m t l p, ch c n thay đ i ph ng th mà không c n thay đ i l p d n xu t th a t m t s l p t n p c s nh c a ng th c u m c a k c ph m vi l p c s a hình (Polymorphsim) a hình khái ni m ln kèm v i k th a Do tính k th a, m t l p có th s d ng l i ph ng th c c a l p khác Tuy nhiên, n u c n thi t, l p d n xu t c ng có th đ nh ngh a l i m t s ph ng th c c a l p c s ó s n p ch ng ph ng th c k th a Nh s n p ch ng ph ng th c này, ta ch c n g i tên ph ng th c b n p ch ng t đ i t ng mà không c n quan tâm đ i t ng c a l p Ch ng trình s t đ ng ki m tra xem đ i t ng thu c ki u l p c s hay thu c l p d n xu t, sau s g i ph ng th c t ng ng v i l p ó tính đa hình 1.3.3 L p trình h ng đ i t ng C++ Vì C++ m t ngơn ng l p trình đ c m r ng t m t ngơn ng l p trình c u trúc C nên C++ đ c xem ngơn ng l p trình n a h ng đ i t ng, n a h ng c u trúc Nh ng đ c tr ng h ng đ i t ng c a C++ • Cho phép đ nh ngh a l p đ i t • Cho phép đóng gói d li u vào l p đ i t ng Cho phép đ nh ngh a ph m vi truy nh p d li u c a l p b ng t khoá ph m vi: public, protected, private ng ... TRÌNH C++ PGS.TS Tr n ình Qu KS Nguy n M nh Hùng L p trình nâng cao v i C++ L p trình h ng đ i t ng v i C++ GI I THI U C++ ngơn ng l p trình h ng đ i t ng đ c m r ng t ngơn ng C Do v y, C++ có... ng C++ Vì C++ m t ngơn ng l p trình đ c m r ng t m t ngôn ng l p trình c u trúc C nên C++ đ c xem ngơn ng l p trình n a h ng đ i t ng, n a h ng c u trúc Nh ng đ c tr ng h ng đ i t ng c a C++. .. ng b i Trình bày cách th c k th a gi a l p C++, nguyên t c truy nh p k th a, đ nh ngh a n p ch ng ph ng th c tính đa hình l p trình h ng đ i t ng v i C++ Ch ng 7: M t s l p quan tr ng Trình bày