Giáo trình Tự học C++ trong 21 ngày

- Ký tự đầu tiên là biểu tượng # : là một tín hiệu để cho bộ tiền xử lý. Mỗi lần bắt đầu biên dịch, bộ tiền xử lý được chạy. Bộ tiền xử lý đọc mã nguồn của bạn, tìm kiếm những dòng bắt đầu với dấu ( #) và thực hiện các dòng này trước khi biên dịch. - Include là một lệnh tiền xử lý. Dấu ngoặc đơn chỉ cho bộ tiền xử lý để tìm trong tất cả các vị trí thông thường đối với file này. Nếu bộ biên dịch được thiết lập đúng, dấu ngoặc < > sẽ làm cho bộ tiền xử lý tìm kiếm file " iostream.h" trong thư mục mà chứa tất cả các file H cho bộ biên dịch.

doc133 trang | Chia sẻ: lylyngoc | Lượt xem: 1786 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Giáo trình Tự học C++ trong 21 ngày, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Teache yourself C++. Danh mục: Các phần của một chương trình C++. Giới thiệu hàm Cout. Trình bày chú thích. Định nghĩa hàm. Hằng số và biến số. Các kiểu biến số. Typedef. Ký tự dặc biệt. Hằng số. Hằng số liệt kê. Biểu thức và câu lệnh. Câu lệnh . Biểu thức. Các toán tử. Toán tử tăng và giảm. Câu lệnh if. Toán tử lô gíc. Toán tử phụ thuộc. Các loại hàm. Khai báo hàm Nguyên mẫu hàm. Biến khu vực (biến địa phương). Biến toàn cục. Giá trị trả về. Tham số mặc định. Các hàm xếp chồng. Các hàm InLine. Đệ qui. Các lớp cơ bản Tạo ra một kiểu mới. Khai báo lớp( class ). Định nghĩa đối tượng (objects). Private và public. Class. Các hàm trong lớp. Cách đặt khai báo lớp và hàm. Các loại vòng lặp. Lệnh goto. While. Continue và break. While(1). Do ... While. FOR. Vòng lặp lồng. Switch. Con trỏ. Con trỏ, địa chỉ, biến. Khai báo con trỏ. Reference Cú pháp: Các phần của chương trình C++. Các chương trình C++ bao gồm : các đối tượng (obj), các biến (var) và các thành phần khác. Một chương trình đơn giản. Ví dụ lấy chương trình HELLO.CPP để giải thích các phần của một chương trình C++. 1: #include 2: 3: int main() 4: { 5: cout << "Hello World!\n"; 6: return 0; 7: } Hello World! Dòng 1 là thư viện # iostream.h. Ký tự đầu tiên là biểu tượng # : là một tín hiệu để cho bộ tiền xử lý. Mỗi lần bắt đầu biên dịch, bộ tiền xử lý được chạy. Bộ tiền xử lý đọc mã nguồn của bạn, tìm kiếm những dòng bắt đầu với dấu ( #) và thực hiện các dòng này trước khi biên dịch. Include là một lệnh tiền xử lý. Dấu ngoặc đơn chỉ cho bộ tiền xử lý để tìm trong tất cả các vị trí thông thường đối với file này. Nếu bộ biên dịch được thiết lập đúng, dấu ngoặc sẽ làm cho bộ tiền xử lý tìm kiếm file " iostream.h" trong thư mục mà chứa tất cả các file H cho bộ biên dịch. ( file "iostream.h" [ Input-Oput-Stream] được dùng bởi hàm "cout"_ giúp cho việc viết ra màn hình. ) Dòng 3 bắt đầu chương trình thông thường với hàm có tên " main() ". Mọi chương ttrình C++ đều có 1 hàm main(). Nói chung," hàm là 1 khối mã lệnh mà thực hiện 1 hoặc nhiều công việc." Các hàm thông thường được gọi bởi các hàm khác, nhưng main() là đặc biệt. Khi chương trình bắt đầu, main() được tự động gọi lên. ( main(), giống như tất các hàm, phải định rõ loại giá trị nào nó sẽ trả về. Kiểu giá trị trả về đối với main() trong HELLO.CPP là "void" _nghĩa là hàm này sẽ không trả về bất cứ giá trị nào. ) Tất cả các hàm bắt đầu với một ngoặc mở ({) và kết thúc một dấu ngoặc đóng (}). Dấu ngoặc của main() là trên dòng 4 và dòng 7. Phần căn bản của chương trình là dòng số 5. Hàm "cout" dùng để in một bản tin ra màn hình. Cách dùng cout : từ cout đặt sau toán tử (<<). Bất cứ cái gì sau dầu này thì đều được viết lên màn hình. Nếu bạn muốn viết một chuỗi ký tự, phải viết chúng trong dấu ngoặc kép ("), như dòng 5. Cuối cùng là 2 ký tự : " \n " _ bảo hàm cout nhảy xuống một dòng mới sau từ Hello World ! Đây là mã đặc biệt được giải thích kỹ ở phần sau. Trong quyển sách này hàm main() sẽ luôn trả về 0. Một cái nhìn ngắn gọn về hàm Cout. Listing 2.2.Using cout. 1: // Listing 2.2 using cout 2: 3: #include 4: int main() 5: { 6: cout << "Hello there.\n"; 7: cout << "Here is 5: " << 5 << "\n"; 8: cout << "The manipulator endl writes a new line to the screen." << Âendl; 9: cout << "Here is a very big number:\t" << 70000 << endl; 10: cout << "Here is the sum of 8 and 5:\t" << 8+5 << endl; 11: cout << "Here's a fraction:\t\t" << (float) 5/8 << endl; 12: cout << "And a very very big number:\t" << (double) 7000 * 7000 << Âendl; 13: cout << "Don't forget to replace Jesse Liberty with your name...\n"; 14: cout << "Jesse Liberty is a C++ programmer!\n"; 15: return 0; 16: } Hello there. Here is 5: 5 The manipulator endl writes a new line to the screen. Here is a very big number: 70000 Here is the sum of 8 and 5: 13 Here's a fraction: 0.625 And a very very big number: 4.9e+07 Don't forget to replace Jesse Liberty with your name... Jesse Liberty is a C++ programmer! Chú ý : 3 giá trị được đưa ra trên dòng 7, mỗi giá trị được tách ra bởi toán tử chèn. Giá trị đầu tiên là chuỗi " Here is 5: ". Chú ý có dấu cách sau dấu hai chấm. Dấu cách là một phần của chuỗi. Tiếp đến, giá trị 5 được đưa ra đến toán tử chèn và ký tự dòng mới ( luôn luôn trong dấu ngoặc kép hay dấu ngoặc đơn). Điều này tạo ra dòng: Here is 5: 5 được in ra màn hình. Vì không có ký tự dòng mới nên giá trị sau đó sẽ được in ngay sau đó. Đây gọi là móc nối 2 giá trị. Trên dòng 8, bản tin được in ra, và sau đó lệnh " endl" được sử dụng. Mục đích của "endl " là để viết một dòng mới ra màn hình. ?Trên dòng 9, ( \t) được đưa vào. Đây là chèn một ký tự "tab" và nó được dùng trên dòng 8-12. Dòng 9 chỉ ra rằng không chỉ có các số nguyên, số nguyên dài cũng được in ra. Dòng 10 giải thích rằng: cout sẽ thực hiện phần bổ sung đơn giản. Giá trị của 8+5 được đưa ra bởi cout, nhưng 13 được in ra. Trên dòng 11, giá trị 5/8 được chèn vào cout. Số hạng (float) chỉ ra cho cout rằng bạn muốn giá trị này có giá trị tương hệ số 10, và vì vậy một phân số được in. Trên dòng 12, giá trị 7000*7000 đưa tới cout và số hạng (double) chỉ cho cout biết bạn muốn cái này được in ra sử dụng ký hiệu toán học Chú thích (Comments). Dùng để giải thích câu lệnh cho dễ hiểu và giới thiệu được các thông tin về tác giả và thời gian sửa đổi mới nhất cho dễ nâng cấp. Trong C++ có hai cách báo hiệu lời chú thích là : ( // ) và ( /* ). Dấu ( // ) này bảo cho chương trình biên dịch bỏ qua tất cả những gì sau dấu chú thích này, tới tận hết dòng. Dấu ( /* ) này bảo cho chương trình biên dịch bỏ qua tất cả những gì sau dấu chú thích này, tới khi tìm thấy một ( /* ) khác. Cách sử dụng Comments: Một qui luật chung, nên có một chú thích ở đầu của toàn chương trình, nói lên chương ttrình làm cái gì. Mỗi hàm cũng nên có chú thích giải thích hàm làm cái gì và nó trả về giá trị nào. Nếu trong chương trình có câu lệnh nào khó hiểu thì cũng nên có chú thích làm sáng tỏ vấn đề. Listing 2.3. HELP.CPP demonstrates comments. 1: #include 2: 3: int main() 4: { 5: /* this is a comment 6: and it extends until the closing 7: star-slash comment mark */ 8: cout << "Hello World!\n"; 9: // this comment ends at the end of the line 10: cout << "That comment ended!\n"; 11: 12: // double slash comments can be alone on a line 13: /* as can slash-star comments */ 14: return 0; 15: } Hello World! That comment ended! Chú thích ở đầu mỗi file. Thông tin về tên của chương trình. Tên của file Có hàm hoặc chương trình gì. Mô tả chung về công việc của chương trình. Tên tác giả. Lịch sử của quá trình sửa đổi. Trình biên dịch và kết nối nào và các công cụ khác được dùng để thực hiện chương trình. Thêm các chú ý nếu cần. Ví dụ : /************************************************************ Program: Hello World File: Hello.cpp Function: Main (complete program listing in this file) Description: Prints the words "Hello world" to the screen Author: Jesse Liberty (jl) Environment: Turbo C++ version 4, 486/66 32mb RAM, Windows 3.1 DOS 6.0. EasyWin module. Notes: This is an introductory, sample program. Revisions: 1.00 10/1/94 (jl) First release 1.01 10/2/94 (jl) Capitalized "World" ************************************************************/ Hàm ( Functions ). Hàm main() là đặc biệt. Các hàm thông thường được gọi trong chương trình của bạn. Một chương trình được xử lý từng dòng theo thứ tự mà nó có trong mã nguồn, tận khi đến một hàm. Sau đó chương trình rẽ nhánh để xử lý hàm. Khi hàm kết thúc, nó trả lại điều khiển cho dòng mã ngay sau nó. Khi một chương trình cần thực hiện một dịch vụ, nó có thể gọi một hàm để thực hiện dịch vụ đó. Ví dụ sau minh hoạ điều đó: Listing 2.4. Demonstrating a call to a function. 1: #include 2: 3: // function Demonstration Function 4: // prints out a useful message 5: void DemonstrationFunction() 6: { 7: cout << "In Demonstration Function\n"; 8: } 9: 10: // function main - prints out a message, then 11: // calls DemonstrationFunction, then prints out 12: // a second message. 13: int main() 14: { 15: cout << "In main\n" ; 16: DemonstrationFunction(); 17: cout << "Back in main\n"; 18: return 0; 19: } In main In Demonstration Function Back in main Cách sử dụng hàm: Hàm hoặc trả về giá trị hoặc chúng trả về void ( nghĩa là chúng trả về số không "nothing" ). Một hàm mà cộng hai số nguyên, phải trả về tổng và vì vậy sẽ được định nghĩa để trả về một giá trị số nguyên. Một hàm mà chỉ in một bản tin không có cái gì để trả về, vì vậy sẽ được khai báo để trả về dạng "void". Một hàm bao gồm : đầu đề và thân hàm. Đầu đề bao gồm lần lượt : kiểu trả về, tên hàm, và các tham số dành cho hàm. Các tham số dành cho hàm cho phép các giá trị được đưa vào bên trong hàm. Vì vậy,nếu hàm để cộng 2 số, các số sẽ là tham số cho hàm. Ví dụ một đầu đề dạng hàm thông thường: int Sum(int a, int b) Mỗi tham số được khai báo cùng với kiểu giá trị sẽ đưa vào ; giá trị thông thường được đưa vào bằng cách gọi hàm được gọi là đối số. Nhiều nhà lập trình sử dụng sử dụng hai số hạng : tham số (parameters) và đối số (arguments) như là " synonyms". Những người khác cẩn thận đối với việc phân biệt thược về chuyên môn. Trong sách này sẽ sử dụng các số hạng đó có thể hoán đổi cho nhau. Thân hàm bao gồm : một dấu ngoặc mở, không có hoặc có các câu lệnh và dấu ngoặc đóng. Các lệnh cấu trúc nên công việc của hàm. Một hàm có thể trả về một giá trị, sử dụng một lệnh trả về. Lệnh này cũng làm cho hàm kết thúc. Nếu không đưa vào một lệnh trả về bên trong hàm, nó sẽ tự động trả về dạng void ở cuối hàm. Giá trị được trả về phải là dạng đã được khai báo ở đầu hàm. Listing 2.5. FUNC.CPP demonstrates a simple function. 1: #include 2: int Add (int x, int y) 3: { 4: 5: cout << "In Add(), received " << x << " and " << y << "\n"; 6: return (x+y); 7: } 8: 9: int main() 10: { 11: cout << "I'm in main()!\n"; 12: int a, b, c; 13: cout << "Enter two numbers: "; 14: cin >> a; 15: cin >> b; 16: cout << "\nCalling Add()\n"; 17: c=Add(a,b); 18: cout << "\nBack in main().\n"; 19: cout << "c was set to " << c; 20: cout << "\nExiting...\n\n"; 21: return 0; 22: } I'm in main()! Enter two numbers: 3 5 Calling Add() In Add(), received 3 and 5 Back in main(). c was set to 8 Exiting... Hằng số và biến số. Biến số là gì: Trong C++, biến số là nơi để lưu giữ thông tin. Một biến số là một vị trí trong bộ nhớ của máy tính mà có thể lưu giữ một giá trị và từ đó bạn có thể truy nhập vào giá trị đó sau này. Bộ nhớ của máy tính có thể được xem như là một loạt các "cubbyholes". Mỗi "cubbyholes" hay vị trí trong bộ nhớ được đánh số lần lượt. Những số này được biết là địa chỉ bộ nhớ. Một biến lưu giữ trong một hoặc nhiều "cubbyholes" để lưu một giá trị. Tên biến ( ví dụ : myVariable) là một nhãn trên 1 hay nhiều "cubbyholes", vì vậy có thể tìm nó dễ dàng không cần sự hiểu biết địa chỉ bộ nhớ thông thường của nó. Cách thiết lập biến: Khi định nghĩa một biến trong C++, bạn phải bảo cho trình biên dịch biết biến là kiểu gì : số nguyên, ký tự,.... Đây là thông tin báo cho trình biên dịch biết kích thước lớn bao nhiêu để thiết lập một khoảng bộ nhớ và kiểu giá trị bạn muốn lưu trong biến của bạn. Mỗi "cubbyholes" là lớn 1 byte. Nếu kiểu biến tạo ra là kích thước 2 byte, nó cần 2 byte của bộ nhớ, hay 2 "cubbyholes". Kiểu biến sẽ cho trình biên dịch biết cần bao nhiêu bộ nhớ để dành cho biến. Kích thước kiểu số nguyên (Intergers) Một biến char (dùng để lưu ký tự) thường là một byte long. Một short interger là 2 byte trên hầu hết các máy tính, một long interger thường là 4 byte, và một interger (không phải là long hay short) có thể là 2 hay 4 byte. Một character là một chữ đơn, số, hay biểu tượng chiếm 1 byte của bộ nhớ. Listing 3.1. Determining the size of variable types on your computer. 1: #include 2: 3: int main() 4: { 5: cout << "The size of an int is:\t\t" << sizeof(int) << " bytes.\n"; 6: cout << "The size of a short int is:\t" << sizeof(short) << " bytes.\n"; 7: cout << "The size of a long int is:\t" << sizeof(long) << " bytes.\n"; 8: cout << "The size of a char is:\t\t" << sizeof(char) << " bytes.\n"; 9: cout << "The size of a float is:\t\t" << sizeof(float) << " bytes.\n"; 10: cout << "The size of a double is:\t" << sizeof(double) << " bytes.\n"; 11: 12: return 0; 13: } Output: The size of an int is: 2 bytes. The size of a short int is: 2 bytes. The size of a long int is: 4 bytes. The size of a char is: 1 bytes. The size of a float is: 4 bytes. The size of a double is: 8 bytes. Số có dấu và không dấu. Nói chung tất cả các kiểu số nguyên là 2 dạng chình : có dấu và không có dấu. Mục đích ở đây là thỉnh thoảng bạn cần số âm và không cần. Số nguyên ( short và long )không có từ "unsigned" được coi là có dấu (signed). Số nguyên có dấu hoặc là số dương hoặc số âm. Số nguyên không dấu luôn là dương. Số nguyên không dấu short có giá trị từ : 0 đến 65535 Số nguyên có dấu short có giá trị từ : -32768 đến 32767 Các kiểu biến cơ bản Biến dấu phảy động dùng để biểu diễn số thực (real) Biến Character chiếm 1 byte dùng để chứa 256 ký tự hoặc biểu tượng của bảng ASCII hoặc ASCII mở rộng. Table 3.1. Variable Types. Type Size Values Unsigned short int 2 bytes 0 to 65,535 Short int 2 bytes -32,768 to 32,767 Unsigned long int 4 bytes 0 to 4,294,967,295 Long int 4 bytes -2,147,483,648 to 2,147,483,647 Int (16 bit) 2 bytes -32,768 to 32,767 Int (32 bit) 4 bytes -2,147,483,648 to 2,147,483,647 Unsigned int (16 bit) 2 bytes 0 to 65,535 Unsigned int (32 bit) 2 bytes 0 to 4,294,967,295 Char 1 byte 256 character values Float 4 bytes 1.2e-38 to 3.4e38 Double 8 bytes 2.2e-308 to 1.8e308 Cách tạo một biến: Đầu tiên là kiểu biến, sau đó là một hoặc nhiều dấu cách, sau đó là tên biến và dấu chấm phẩy. Example 1 main() { unsigned short x; unsigned short y; ULONG z; z = x * y; } Example 2 main () { unsigned short Width; unsigned short Length; unsigned short Area; Area = Width * Length; } Có thể tạo nhiều biến cùng một lúc như sau: unsigned int myAge, myWeight; // two unsigned int variables long area, width, length; // three longs Từ khoá. Bao gồm : if, while , for, main. Không được sử dụng từ khóa làm tên biến. Gán giá trị cho biến Gán giá trị cho biến bằng cách sử dụng toán tử (=). Ví dụ: unsigned short Width; Width = 5; Bạn có thể gộp ba bước thành một bước. unsigned short Width = 5; Tương tự, có thể khởi tạo cho nhiều biến cùng một lúc như sau: long width = 5, length = 7; Ví dụ này khởi tạo biến số nguyên long là width =5 và biến số nguyên long là length =7. Ta có thể kết hợp cả khai báo và khởi tạo như sau: int myAge = 39, yourAge, hisAge = 40; Listing 3.2. A demonstration of the use of variables. 1: // Demonstration of variables 2: #include 3: 4: int main() 5: { 6: unsigned short int Width = 5, Length; 7: Length = 10; 8: 9: // create an unsigned short and initialize with result 10: // of multiplying Width by Length 11: unsigned short int Area = Width * Length; 12: 13: cout << "Width:" << Width << "\n"; 14: cout << "Length: " << Length << endl; 15: cout << "Area: " << Area << endl; 16: return 0; 17: } Output: Width:5 Length: 10 Area: 50 Typedef Ta có thể cảm thấy chán ngắt và buồn tẻ nếu cứ phải sử dụng kiểu khai báo unsigned short int. C++ cho phép bạn tạo ra một bí danh cho cụm từ này bằng cách sử dụng từ khoá typedef, viết tắt cho sự định nghĩa kiểu. Ta định nghĩa bằng cách: sau từ khoá typedef là kiểu và sau đó là tên mới. Ví dụ: Typedef unsigned short int USHORT Tên mới USHORT sẽ dùng ở bất cứ đâu thay thế cho việc viết : unsigned short int. Listing 3.3. A demonstration of typedef. 1: // ***************** 2: // Demonstrates typedef keyword 3: #include 4: 5: typedef unsigned short int USHORT; //typedef defined 6: 7: void main() 8: { 9: USHORT Width = 5; 10: USHORT Length; 11: Length = 10; 12: USHORT Area = Width * Length; 13: cout << "Width:" << Width << "\n"; 14: cout << "Length: " << Length << endl; 15: cout << "Area: " << Area <<endl; 16: } Output: Width:5 Length: 10 Area: 50 Hiện tượng nhảy vòng trong số nguyên có dấu và không có dấu. Hiện tượng nhảy vòng khi biến số vượt quá giá trị cho phép của kiểu khai báo. Listing 3.4.A demonstration of putting too large a value in an unsigned integer. 1: #include 2: int main() 3: { 4: unsigned short int smallNumber; 5: smallNumber = 65535; 6: cout << "small number:" << smallNumber << endl; 7: smallNumber++; 8: cout << "small number:" << smallNumber << endl; 9: smallNumber++; 10: cout << "small number:" << smallNumber << endl; 11: return 0; 12: } Output: small number:65535 small number:0 small number:1 Listing 3.5. A demonstration of adding too large a number to a signed integer. 1: #include 2: int main() 3: { 4: short int smallNumber; 5: smallNumber = 32767; 6: cout << "small number:" << smallNumber << endl; 7: smallNumber++; 8: cout << "small number:" << smallNumber << endl; 9: smallNumber++; 10: cout << "small number:" << smallNumber << endl; 11: return 0; 12: } Output: small number:32767 small number:-32768 small number:-32767 Characters Biến ký tự ( type char ) là 1 byte, đủ để chứa 256 giá trị. Một char có thể được dịch như là một số nhỏ ( 0-255) hay như là một số của tập ASCII. Trong mã ASCII, "a" được xác định bằng giá trị 97. Tất cả chũ thường và chữ hoa, chũ số và các dấu chấm có giá trị trong khoảng 1 đến 128. Listing 3.6. Printing characters based on numbers 1: #include 2: int main() 3: { 4: for (int i = 32; i<128; i++) 5: cout << (char) i; 6: return 0; 7: } Output: !"#$%G'()*+,./0123456789:;?@ABCDEFGHIJKLMNOP _QRSTUVWXYZ[\]^'abcdefghijklmnopqrstuvwxyz~s Các ký tự đặc biệt Trình biên dịch C++ chấp nhận một số ký tự định dạng. Bạn phải đặt ký tự này vào trong đoạn mã bằng cách đánh dấu gạch chéo ( được gọi là ký tự điều khiển ), sau đó là kí tự. Vì vậy để đưa một ký tự tab vào trong đoạn mã, thực hiện như sau : Char tabCharacter = '\t' ; Ví dụ này khai báo một biến char (tabCharacter) và khởi tạo nó với ký tự \t , mà được chấp nhận như là một tab. Các ký tự in đặc biệt được dùng khi in hoặc ra màn hình hoặc ra một thiết bị đầu ra. Table 3.2. The Escape Characters. Character What it means \n New line \t Tab \b Backspace \" Double quote \' Single quote \? Question mark \\ Backslash Hằng số. Giống như biến số, hằng số cũng là nơi lữu trữ dữ liệu. Bạn phải khởi tạo hằng số khi tạo ra nó và không thể gán một giá trị mới. Trong C++ có hai kiểu hằng : chữ và biểu tượng. Hằng số kiểu chữ Ví dụ : Int myAge = 39 ; MyAge là một biến kiểu int ; 39 là một hằng số dạng chữ. Bạn không thể gán một giá trị cho 39, và giá trị của nó không thể thay đổi được. Hằng số kiểu biểu tượng. Là một hằng số mà được đại diện bằng 1 tên, chỉ như là một biến nhưng không giống như biến, giá trị của nó sau khi khởi tạo thì không thay đổi được. Nếu chương trình có một biến số nguyên đặt tên là : students và một biến khác tên là : classes, có thể tính toán có bao nhiêu sinh viên, nếu đã biết có 15sinh viên/1 lớp : Students = classes * 15 ; Trong ví dụ này, 15 là hằng số kiểu chữ số. Đoạn mã trở lên dễ đọc và dễ sửa. Nếu thay thế bằng một hằng số kiểu chữ cho giá trị này thì sẽ là: St
Tài liệu liên quan