Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Đại cương Ngôn ngữ lập trình c++ từ cơ bản đến hướng đối tượng...

Tài liệu Ngôn ngữ lập trình c++ từ cơ bản đến hướng đối tượng

.PDF
17
42
148

Mô tả:

T S . DƯƠNG TỬ CƯỜNG NGÔN NGỮ LỘP TRÌNH C++ CƠBẢN Đến HƯỚNC ĐỐ! TƯỢNC Từ £)AỈ H Ọ C Q U O C G iA HA ÌMỌl ĨRUNG TÀM THÕNG ĨIN ĨHƯ VIÉN V - GO 03R8S 5 NHÀ X U Ấ T BẢN KH O A HỌC VÀ K Ỹ THUẬT t HÀ NÔI • Clìịii trách ỉỉlìiệm xiiủì bdiì PGS.TS. Tô Đ á n g Hải Biên tập ThS. Vũ T h ị M in h L u ậ n Trììììì bày bìa Hương Lan NHÀ XUẤT BẢN KHOA HỌC VÀ KỸ THUẬT 70 - Trần Hưng Đạo, Hà Nội In 1000 bản, khổ 14,5 X 20,5 cm lại Xí nghiệp in NXB Lý hiạn chính Irị Giấy phép xuất bán số: 150-191, cấp ngày 4/2/2005 In xong và nộp lưu chicu tháng 10 năin 2003. LỜI NÓI Đ Ầ U Ti'ong nliững nảni 1980, ngôn ngữ c đã k h ả n g định đưỢc vị trí quan trọng trong các ngôn ngữ lập trìn h có cấu trúc bởi tính đa năng của nìình. Một chương trình đưỢc thiết kô^ trê n ngôn ngữ c thường p h á i huy dưỢc nhiều tác dụng khó có thể hội tụ ở các ngôn ngữ lặỊ) trình khác. Tuy vậy khi độ phức tạp của các bài toán cần giai quyôt trôn thực tê ngày càng tàng thì ngôn ngử c cũng đã bộc lộ nhữ ng điểm yêUj n h ấ t là khi clược sử d ụ n g cho các dự án lốn. Đố khác phục những h ạ n chê còn tồn tại trong ngôn ngữ c nói riêng và của các ngôn ngữ lập trìn h có cấu trúc nói chung, các nhà thiôt k ế ph ần mềm đả p h á t triển một ý tưỏng inoi. Các ý tương này, mặc dù được x u ấ t hiện từ n h ữ n g n á m 1970 nh ư n g chỉ dược sử dụng inột cách rộng rãi để xây dựng phán mềm vào những năm 1980. Điểm mâu chôt để xây dựng lén ý tương này là khả n ă n g thiết k ế những p hần mềm m a n g nlìừng đặc tính của thô^ giới thực bên ngoài. Kỹ t h u ậ t lập trìn h dựa trên ý iưởng mới này có tên “Kỹ t h u ậ t lập trìn h hưống đố*i iưỢng” (Object - O riented - Program ing OOP) và trê n kỹ t h u ậ t rnới này n h iề u trìn h biên dịch đã dược th i ế t kô^ n h ư S m alltalk, C ' \ V.V.. Lập trìn h định hưống đôi tượng đưỢc p h á t triển từ ngôn xigữ lập trìn h có cấu trúc n h ư n g th a y vì xoay q uan h chức n ă n g của nhiộnì vụ đưỢc đ ặ t ra, OOP lại đ ặ t trọng tâ m của mình vào việc xử lý các dữ liệu để thực hiện các chức n ă n g đó. Trong lập trìn h định hưống đôi tưỢng, k h á i niệm về object (đôl tưỢng) trở t h à n h một khái niệm trọng tâm và h ầ u n hư mọi công việc trong ĩiìột chương trình đều đưỢc tiến h à n h trê n các đôl tưỢng này. Các th à n h phần của một OOP bao gồm: đối tưỢng, thuộc tính, tác động (phương thức) giao diệu và k h ả n à n g n h ìn Ihấy của các đôi tượng. Mọi đốĩ tưỢng được th iế t lập trong OOP đều là các câu trúc độc lập bao gồm dữ liệu và các tác động mà đôi tượng có thể thực hiện trê n các dữ liệu đó. Khái niệm về ẩốì tưỢng được dùng riêng cho một thực thể riêng biệt hoặc cho một lớp của nhiều thực thể. Một đổi tưỢng chỉ có thể thực hiện các tác động đưỢc định nghĩa bên trong nó qua các thông điệp dược gửi đên chính bản th â n đôi tưỢng này và điều cần lưu ý là chỉ có ch ính đôl tượng này mới có thể thực hiện các tác động đó. Qua th ô n g điệp này đôi tượng sẽ n h ậ n dưỢc các nhiệm vụ đòi hỏi nó ph ả i thực hiện. Như vậy, một đôì tưỢng có thể xem n h ư là một đại lượng mà ở đó hội tụ nh ữ n g đặc điểm sau: có tên, có trạ n g thái, có các tác động mà đôi tượng có thể thực hiện và k h ả nán-g ẩ n đôi vối các đôi tượng khác. Ngôn ngữ là một trong các ngôn ngữ lập trìn h được xây dự ng từ các ý tưởng mới này và có thể xem là một đại diộn điển hình cho phương pháp lập trìn h mới: lập trìn h hướng đôi tưỢng. Vói ngôn ngữ này, ta có th ể làm quen với một sô" khái niệm mới trong kỹ t h u ậ t lập trìn h liên quan dến t h ế giới thực: tín h đóng góp (encapsulation), tính th ừ a k ế (inheritance) và tính tương ứng bội (polymorphism). Các đặc tính không có trong ngôn ngữ lập trình truyền thông đã làm cho có th ể p h á t huy h ế t tác dụng của mình khi th iê t kế các dự án lốn n h ư n g củng dem lại nhiều khó k h ă n cho các b ạ n mới b ắ t đầu yới % Đã làm q u e n với thì có thể n h ậ n thấy rằ n g một chương trìn h được viết trên ngôn ngữ này sẽ hết sức súc tích, rõ rà n g và đặc biệt là ớ nìộl c h ừ n g mực nào đó SG cho p h é p Ị>hát t r i ể n nó t h e o m ộ t s u y Iighì hcl sức lự nhiên. Sự p h á t t n ổ n của đã trải qua nhiều chặng dưòiìg vối nlìiổu Ị)hiên ban khác nhau. Tài liộu nàv sử dụng phiên b ả n của hàng Borland - Borland c 3.1 để gíới thiệu về ngôn ngữ Đây là tìình biên dịch mà theo chúng tôi r ấ t tiện lợi cho việc n ghiên cứu cùng như thiôt kô các phần mềm. Cuôn sách này được biên soạiì dựa trên nhiếu tài liệu khác nh au và trê n kinh nghiệm của cliíiih tác giả khi làm việc vói Khác vối nội dung của một sô" tài liộu khác, cuôn sách này được biên soạn đê bạn đọc có thê làm việc ngav với C++ mà không cần p h ả i biết về ngôn ngữ c . Nội dưng của cuốn sách được chia làm 2 p h ầ n bao gồm 11 chường Phần I: C++ - Lập trinh cơ bản, bao gồm 6 chương; Chương I: Các khái niệm cơ bản về C++. Chương II: Các hàm và các dòng nhập xuất. Chương III: Các phép toán và câu lệnh điều khiển. Chương IV: Bộ tien xử lý. Chương V: Biến con trỏ, biến th a m chiếu và hàm. Chvỉơng VI: Các kiểu dữ liệu phức tạp. Phần II: L ậ p trình hướìig đối tượng, bao gồm 5 chương: Chương VII: Lớp và đốì tưỢng. Chương IIX: Tính th ừ a kê. Chương IX: Định nghĩa chồng các h à m và toán tử Chương X: Tính tương ứng bội. Chương XI: Thư viện các dòng n h ậ p x u ấ t Ngôn ngữ lập trình c là một ngôn ngữ lập trìn h khó và c^' lại còn phức tạp hơn ngôn ngữ c vì vậy đòi hỏi ở chúng ta một tin h th ầ n chịu khó tìm tòi, h a m hiểu biết. Tuv vậy, một khi bạn đã n ắ m chắc được ngôn ngữ này, chúng tôi,tin tưởng rằn g, trong ta y bạn, sẽ trở th à n h một công cụ h ế t sức đắc lực và vô cùng tiện lợi giúp bạn giải quyết các bài toán kỹ t h u ậ t phức tạp mà trước đó bạn đã phải vất vả khi giải q u yết t r ê n ngôn ngữ các ngôn ngữ khác. Chúc các bạn th à n h công. 6 c và Phần I C++ LẬP TRÌNH Cơ BẢN ■ Chương I CÁC KHÁI NIỆM C ơ BẢ N VỂ C + + 1.1. CÁC KÝ HIỆU Các ký hiộu cơ b ả n bao gồm n hữ ng ký tự được phép sử d ụ n g trơng ngôn ngữ n h ư các chữ cái, sô" và tổ hỢp các ký tự khác. C++ sử dụng một sô"ký tự sau: - 52 chữ cái in thưòng, in hoa và ký tự gạch nốì: a, b, c, . . .z, A, B, c,. . . z và _ - Các chữ sô"; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - Các ký tự đặc biệt đưỢc dùn g riêng trong ngôn ngữ: 7 ^ - ? I ( ) [ ] + _ * / = ^ Ị A . M I J ^ g Một sô" ký tự khác như dấu cách (ký tự trắng), dấu xuông h à n g và dấu canh theo cột. Các từ khoá trong C++ được dùn g để viết và xây dựng các câu lệnh của chương trình. Cũng giôVig n h ư c, các từ khoá này luôn được viết bằng chữ thưòng và không được d ù n g cho các mục đích khác nh ư đặt tên cho biến, cho h à m v.v. Có thể liệt kê một sô" từ khoá được sử d ụ n g trong C++: auto break case char continue default do double else entry enum extern float for goto int long register if return sezeof short static struct switch typedef union class unsigned while void asm fortran pascal ad a volatile cortst 1.2. HẰNG Các thông tin mà giá trị không th ể t h a y đổi tro n g chướng t r ìn h được gọi là hằng. Các h ằ n g trong C++ được chia làm một sô" loại sau: H ằ n g sô hoc: Các hằn g này có giá trị b ằ n g giá trị của các £Ô" mà nó biểu diễn. H ằng sô" học lại được chia làm hai loại 8 • Hằng sò nguyên: Loại hằng sô này có thể được biểu diỗn dưới dạng cơ sô^ 10, cơ sô" 8 và cơ sô' 16. Các hằng cơ sô' 10 có ihể k iông là số’ dương hoặc âm. c ẩ n lưu ý là dược dùng sô^ 0 như là cliữ số^ dầu tiên của hằng số^ n J^uyôn. Ví dụ + 14 - H ằng sô'nguyên dương có giá trị là 14; -12 ' H ằn g sô" nguyên âm có giá trị là âm 12; 012 - Không phải là h ằ n g sô" nguvên Các hằng sô' n guyên cơ sô" 8 là các h ằ n g không có dấu và đưỢc biểu diễn b ằ n g các chữ sô" trong hệ đếm cơ số’ 8 - các sô" từ 0 đến 7. Chữ đầu tiên trong các h àng kiểu này phải là chữ số’ 0. Đây chính là nguyên n h â n chữ sô" 0 không được sử dụng như chữ sô^ đầu tiên của h ằ n g cơ sô" 10. Ví dụ: 014 • H ằn g cơ sô" 8 vổi giá trị là 12 (cơ sô" 10) 0114 - H ằ n g cơ sô" 8 vỏi giá trị 76 (cơ số' 10) Các hằng sô" n guyên cơ sô" 16 được viết không có dấu và luôn đưỢc b ắ t đầu bơi o x hoặc Ox. Trong hệ đếm cơ sô" 16 ngoài các chữ sô" từ 0 đến 9 người ta còn sử dụng các chữ cái từ A đến F để biểu thị các sô' từ 10 đến 15. Ví dụ: o x c hoặc Oxc - H ằ n g cơ sô" 16 có giá trị 12 (cơ sô" 10) OXFF hoặc Oxff - H ằng cơ sô" 16 có giá trị 255 (cơ sô" 10) • H ằ n g s ố thực: Là một loại h ằ n g chỉ được được viết dưới 9 dạng cơ số 10. Một hằn g sô^ thực có thể dược biểu diỄa dưói dạng thập phân hay dưới d ạ n g khoa học Ví dụ: 12.0 - H ằng số* thực dương có giá trị là \2.0 -12.5 - Hằng sô" thực âm có giá trị là -12.15 1.2E1 hoặc 1.2el - H ằng sô" thực với giá trị 12 H ằ n g ký tư bao gồm các ký tự đơn được viết tro ng dấư n h á y đơn, ví dụ 'A', 'B', T . Mỗi kỷ tự có giá trị bằng mã ASCII của nó. Ví dụ mã của ‘A' là 65 và '0' là 48. H ằ n g k i ê u c h u ỗ i là một dãy ký tự đưỢc viết tro n g dấu n h á y kép, ví dụ: "this is a string" là một h ằ n g kiểu chuỗi. Đôl vối h ằ n g kiểu chuỗi cần lưu ý: • Độ dài của h ằ n g kiểu chuỗi là không hạ n c h ế và có th ể không chứa ký tự nào. • Trình biên dịch sẽ tự động đưa thêm một byte có giá trị bằn g 0 (NULL) vào sau chuỗi trong quá trìn h biên dịch. Để p h â n biệt vói ký tự '0', byte này được viết dưỏi d ạ n g '\0'. Byte này đưỢc xem n hư dấu hiệu kết thúc của chuỗi, • Nêu dùng m ảng một chiều để lưu trữ h ằ n g kiểu chuỗi thì sô" p hần tử của m ảng phải lớn hơn sô" ký tự của chuỗi là một đơn vị (để chứa byte NULL). Các ký tự dùng riêng (ký tự không in ra được) có th ể được sử dụng như những ký tự bình thường nh ư n g khi viết chúng phải thêm ký tự \ ở trước. C hẳng h ạ n khi chỉ đưòng dẫn như một h ằ n g kiểu chuỗi, th ay cho "C :\b orlan dc\b gi" ta phải viết " C :\\b o r la n d c \\b g i" . 10 (V) một sô ký tự thuộc dạng không in ra dược (có giá trị ASCII từ 0 đôn 31) n hư ng trìỉih biên dịch có thể nhận biêt được (‘h ún g Ihôn^^ qua một cặp ký tự (dưỢc viết b ắ t dầu bằng ký tự \). Các ký tự này thường dược dùng dể điổu khiển màn hình hoặc máy 111. Báng 1.1 mô tả một sô'ký tự thường hay được sử dụng: Bảng I .ỉ Tác d ụ n g Ký h iệ u Mò tả tro n g c Mả ASCII B>'te trắ n g \0 0 NULL (null byte) 1..Ù1 \b 8 BS (Backspace) Vổ đầu dòng \r 13 CR (Carier Return) C anh cột \t 9 T (Horizontal Tab) Xuông dòng \n 10 NL (New line) S a n g trang \f 12 FF ( Form feed) 'l'ín hiệu chuông \a 7 bel (Bell) 1.3 BIẾN Biên là một đại lượng thuộc một kiểu n h ấ t định (sô" nguyên, sô thực v.v...) mà giá trị có thể th a y đổi trong quá trìn h thực hiện chương trình. Mục đích của biến là dùng để lưu trữ dữ liệu và việc sử d ụ ng biến được thực hiện th ông qua tên của nó. Khi đặt tên cho biến cần phải đảm bảo các qui tắc sau: • Tên bao gồm một dãy các chữ cái, sô" và phải b ắ t đầu 11 bằng chư cái. Không sử dụng các ký tự đặc biệt để đặt tên cho biến kể cả dấu cách. • Tên của biến không được trù n g với các từ khoá. • Có sự p h â n biệt giữa chữ thường và chữ hoa khi đ ặ t tên cho biến. 1.4. CÁ C LOẠI DỮ LIỆU VÀ CÁCH KHAI BÁO T ấ t cả các biến trong ngôn ngữ c và C++ đều phải được k h á i báo trước khi sử dụng. Thông qua việc kh ai báo này trìn h biên dịch xác định kích thước của biến (cấp p h á t bộ nhớ để lưu tr ữ giá trị của biến trong bộ nhố). Khai báo biến đưỢc thực hiện qua cú pháp sau: K i ê u b iê n T ê n b iê n ; Dưới đây sẽ chỉ ra một sô" từ khoá được d à n h cho việc khai báo biến, kích thước của biến và k h o ản g giá trị có th ể được lưu tr ữ trong biến khi khai báo bằng các từ khoá này (đôl với các loại m áy sử dụng 16 bit dữ liệu): Bảng 1.2 K iể u K íc h t h ư ớ c (b it) G iá t r i• ch a r 8 [-126 - 125] u n s ig n e d char 8 [0 ^ 255] in t 16 u n s ig n e d int 16 long in t 32 float 32 [-lOe-37 ^ 10e37 double 64 í-lOe-307 - lOe 3071 12 -32768 - +32767] [0 - 65535] -2e9 -í- +2e9 Trong các kiôu biôn này; char dừỢc dùng khai báo cho dữ liệu kiếu ký tự; int - dữ Hệu kiểu sô" nguyên: f lo a t - dử liệu kiểu sô" thực; d o u b l e - dữ liệu kiểu số’ thực với độ chính xác gấp đôi; u n s i g n e d - dữ liệu kh ông dấu (chỉ d ù n g cho c h a r và int); lo n g - Dữ liệu có độ dài lớn hơn gâ^p hai lần (dùng cho int và float). X. Các biến có thể được khai báo trê n cùng một dòng (ví dụ in t y) hoặc trê n các dòng khác nhau, chẳng hạn: intx, y; float z; int a; v ể vị trí kh ai báo các biến, trong khi ngôn ngữ c đòi hỏi việc khai báo các biên phải đưỢc thực hiện ở trước p h ạ m vi mà chúng được sử dụng (thông thường khi b ắ t đầu định ng hĩa hàm ) thì việc khai báo biến trong C++ chỉ cần dược thực hiện trưóc khi các biến này được sử dụng. 1.5. MẢNG M ảng là tập hỢp các biến có cùng kiểu được p h â n bô" lien tục trong bộ nhố. Khi sử dụng m ảng cũng cần phải lưu ý: • M ảng phải được đ ặ t tên trưóc khi sử dụng. N guyên tắc đ ặ t tê n của m ảng giông n hư biến; • Mỗi p h ầ n tử của m ảng được xem là một biến; • M ảng phải được khai báo trước khi sử dụng 13 Dưói đây là một sô" ví dụ vê khai báo m ảng trong C++: in t x[5]; m ả n g X vối 5 p h ầ n tử thuộc kiểu int; char a[3]; m ảng a với 3 p h ầ n tử thuộc kiểu char. P h ầ n tử của m ảng có thể đưỢc tru y cập thông qua chỉ so* và ph ần tử đầu tiên của m ảng trong C++ luôn có chỉ sô 0. N h ư vậy x [ l ] \ k p h ầ n tử thứ 2 của m ảng và x[0] là p h ầ n tử đầu của mang. C ần lưu ý là thông thưòng các trìn h biên dịch của C++ không kiểm tra giá trị đưỢc gán cho chỉ số’ các p h ầ n tử của mảng. Điều này đòi hỏi ngưòi lập trìn h phải h ê t sức chú ý khi làm việc với chỉ sô" của mảng. Ngoài m ảng một chiều nh ư đã chỉ ra trong các ví dụ trên, C++ còn cho phép định nghĩa nhiều kiểu m ảng khác nhau. Nếu để p h â n biột các p h ầ n tử của m ảng mà phải dùng đên 2 clìỉ số* th i m ảng được gọi là hai chiều. Ví dụ về mảng 2 chiều: in t a[3][3]; M ảng này gồm 9 phần tử và tên của các p h ầ n tử lần lượt là: ^[0][0], a[0][l], a[0][2 a a[2][0], a[2][l], a[2][2' Như vậy đốỉ với m ảng hai chiều th ì chỉ sô" dầu của p h ầ n tử dùng đế chỉ h à n g và chỉ sô" thứ hai dùng để chỉ cột. Các p h ầ n tử của m ản g được lưu trữ trong bộ nhố theo hàng. Theo định nghĩa ta cũng có th ể kh ai báo một m ả n g thuộc kiểu char, về thực chất m ảng này sẽ đưỢc dùng để lưu trữ xâu ký tự. M ảng kiểu char được khai báo n h ư sau: 14 char nanie[12]; Kích thirôc của m ảng này là 12. Như vậy m ảng này có thể dùng tie lưu Irữ 11 ký tự, ký tự cuôi cùng -ký tự NULL sõdưỢc Irình biôn dịch tự động đưa thêm. 1.6. CHÚ GIẢI C++ sử dụng cả hai loại chú giải. Loại Ihứ n h ấ t dành cho mộl khôi ván bản được viết giữa hai ký hiệu /* (bắt đầu) và */ (kôt thúc). Đây cũng lả loại chú giải đã được dùng trong c. Loại tln'i hai dành cho một đoạn ván bản đưỢc tính từ hai ký tự // cho đên CUÔI dòng. Loại nàv chỉ d ù n g cho C++. 1.7. CẤU TRÚC CỦA CHƯƠNG TRÌNH C++ Tiủ cả các chương trình trong C++ đều được xây dựng từ các hàni. Sô'^ lượng hàm trong chương trìn h là không h ạ n chô^ nhưng bao giò cũng phải có ít n h ắ t là một hàm có tên gọi là main. Thông qưa hàm này chương trìn h sẽ thực hiện việc giao tiếp với hộ diều hành. Khái niệm về hàm sẽ đưỢc đề cập chi tiêt trong chương V. Sau dây là một ví dụ cụ thể về một chương trình được viết ti'ong C++: #include void main () { int i; i = i+1; cout << i; Trong khi lập trìn h ta có thể sử dụng một sô híxin cúa thư 15 viện chuẩn. Các hàm này thường dã viẽt sẵn bởi các n h à cưng cấp và được khai báo trong các header file (file tiêu đề). Các file này thưòng có ph ần mỏ rộng là h (header). Chương trìn h sẽ thực hiện việc nối kết các file tiêu đề này vào file nguồn b ằ n g chỉ thị của bộ tiền xử lý ^include được viêt ở đầu chương trình. Trong ví dụ trên, file iostream./i có chứa k h a i báo của dòng x u ấ t cout - dùng để hiển thị thông tin lên m à n hình; Tl'ong ví dụ, ta chỉ sử dụng một hàm duy n h ấ t là h à m m a in . H àm này có kiểu void có nghĩa là không n h ậ n giá trị tr ả về. N hư vậy từ khoá void có tác dụng định nghĩa một h à m n h ư một thủ tục trong Pascal. Cũng cần lưu ý là một h à m bao giờ củng được bắt đầu bằng ký tự { và kết thúc bằn g ký tự }. Các ký tự này cũng dùng cho việc b ắ t đầu và kết thúc một khổì lệnh. 16
- Xem thêm -

Tài liệu liên quan