Chap1

1,894 views

Published on

Published in: Education, Sports
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,894
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Chap1

  1. 1. TỔNG QUAN Tên môn học: Lập Trình Hướng Đối Tượng C++ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C++ Số đơn vị học trình: 3 Kiến thức tiên quyết: CHƯƠNG I: MỞ ĐẦU Lập trình cơ bản Ngôn ngữ C Nội dung chính: Bộ môn Công nghệ phần mềm Truyền đạt những khái niệm, nguyên lý cơ bản của Khoa Công nghệ Thông tin, ĐHBK Hà nội Lập Trình Hướng Đối Tượng (OOP). Minh họa lập trình hướng đối tượng bằng ngôn ngữ C++. Cao Tuan Dung 2 TÀI LIỆU THAM KHẢO NỘI DUNG 1. Lê Tiến Dũng và các tác giả, quot;Kỹ thuật lập trình hướng Giới thiệu ngôn ngữ C++ đối tượngquot;,, Bộ môn CNPM ĐHBK. Nhắc lại những thành phần cơ bản của ngôn 2. Bruce Eckel, “Thinking in C++”, Prentice Hall Inc., ngữ C 2000. Biểu thức, câu lệnh 3. Budd, Timothy, “An Introduction to Object-Oriented Mảng, con trỏ, tham chiếu, hàm Programming”, Addison-Wesley, 1997. Các phương thức vào ra 4. Robert Lafore, “Object-oriented Programming in C++”, SAMS, 2001. Lớp và đối tượng 5. Phạm Văn Ất, “C++ và Lập Trình Hướng Đối Tượng”, Định nghĩa chồng toán tử Khoa Học Kỹ Thuật, 2000. Kế thừa Đa hình Cao Tuan Dung 3 Cao Tuan Dung 4 1
  2. 2. Lịch sử ngôn ngữ C++ Tính năng mạnh của C C++ dựa trên ngôn ngữ lập trình C Lập trình bậc cao: lệnh điều khiển : rẽ nhánh, lặp ở mức độ trừu tượng của lưu đồ giải thuật => viết các giải thuật dễ dàng. C được phát minh trước 1970 bởi Dennis Lập trình cấu trúc: chia CT thành các modul nhỏ => phát triển CT Ritchie cách hệ thống hơn và dễ bảo trì. Lập trình hệ thống: # PASCAL, C không dùng nhiều kiểu dữ liệu Ngôn ngữ cài đặt hệ thống cho hệ điều hành Unix trừu tượng. Cho phép các thao tác với bộ nhớ rất uyển chuyển=> Tiền thân của C LTV có thể tự do tổ chức và lưu trữ dữ liệu trên bộ nhớ theo ý mình. C hỗ trợ phần lớn các phép xử lí nhu một hợp ngữ . BCPL - Martin Richard . Tính khả chuyển: CT C được dịch ra mã trên nhiều dòng máy và B - Ken Thompson 1970 ,HDH UNIX cho PDP-7. hệ điều hành khác nhau => khả năng tương thích của các câu lệnh trong CT. C còn có bộ tiền xử lí tạo ra khả năng biên dịch theo điều C kế thừa từ B và hoàn thiện để có được các kiện để việc dịch CT thích ứng cho từng hệ thống khác nhau. tính năng mạnh của một NNLTHT có khả năng Tính nhỏ gọn: CT viết trên C sau khi dịch có độ tối ưu về mã lệnh . ứng dụng rộng rãi như ngày nay. Chính vì vậy các CT được dịch từ C thường có kích thước nhỏ gọn. Cao Tuan Dung 5 Cao Tuan Dung 6 Lịch sử ngôn ngữ C++ Những tính năng mới của C++ C++ được phát minh bởi Bijarne Stroustroup Hỗ trợ an toàn dữ liệu: phòng ngừa việc thay đổi (AT&T), bắt đầu năm 1985 dữ liệu không theo ý muốn. Thêm tính năng lập trình hướng đối tượng và loại bỏ một số điểm hạn chế của C. Tái sử dụng mã nguồn Phiên bản thử nghiệm, phiên bản thương mại Các chuẩn ngôn ngữ C++ hiện tại được điều khiển bởi ANSI và ISO Sử dụng toán tử do người dùng định nghĩa C++ thừa hưởng sức mạnh của C, không đặt ra một giới hạn nào cho người lập trình. Cho phép nhiều hàm/toán tử có thể trùng tên Cao Tuan Dung 7 Cao Tuan Dung 8 2
  3. 3. Khi nào dùng C++? 2. Chương trình C++ đầu tiên: Hello.cpp Dự án lớn // My first C++ Program Chương trình hệ thống #include <iostream.h> Đồ họa int main() Cấu trúc dữ liệu { Ràng buộc tốc độ cout << quot;Hello!quot;; Cần quản lý lỗi và ngoại lệ (exception) return 0; Một số chức năng thay đổi thường xuyên } Cao Tuan Dung 9 Cao Tuan Dung 10 Chương trình thứ hai Các thành phần của Chương trình C++ Có cấu trúc đầy đủ của một chương trình C. Tạo một hàm in diện Tập ký tự tích của một hình tròn tương ứng với một bán kính được người sử dụng nhập vào. Mọi NN đều được xây dựng bởi một tập hợp các ký tự nào đó : Ký tự => Từ ( từ khoá) –Syntax-> Câu lệnh-Giải thuật->Chương #include <iostream.h> trình => giải quyết một bài toán, một vấn đề tương ứng. #define PI 3.14 // khai báo một hằng số PI float dientich(float r) // khai báo một hàm tạo công thức tính diện tích Tập các ký tự của C++ bao gồm : { 26 chữ cái hoa và 26 chữ cái thường A-Z và a-z return PI*r*r; 10 chữ số : 0-9 } int main() // hàm chính của chương trình Các ký hiệu toán học : +, -, *, /, %, (), =, … { float r; Dấu gạch dưới cout << quot;Nhập bán kính r =quot;; Các ký hiệu đặc biệt : ‘ ; . ! | & $ # “ [ ] { } cin >> r; cout << quot; n Diện tích hình tròn là “ << dientich(r) ; Dấu trắng ( Space ) return 0; } Cao Tuan Dung 11 Cao Tuan Dung 12 3
  4. 4. Cấu trúc cơ bản của chương trình Các thành phần của Chương trình C++ a. Khai báo tiêu đề asm break case cdecl Một tệp tiêu đề trong chương trình C chứa mô tả các hàm có thể được gọi trong Từ khoá: Từ khoá :bộ từ chương trình . Khi cần gọi một hàm nào trong chương trình ta phải khai báo tệp tiêu đề có mô tả tương ứng cho hàm. => các hàm thư viện luôn được chỉ ra cùng với các vựng được định nghĩa từ char const continu default tệp tiêu đề tương ứng khi được trình bày. trước đối với 1 ngôn ngữ, e b. Khai báo hằng, cấu trúc dữ liệu Các hằng số trong chương trình C thường được định nghĩa bằng chỉ thị tiền xử lý chỉ sử dụng vào các mục do double else enum #define . Ngoài các kiểu dữ liệu cơ bản, một CT C có thể có các cấu trúc dữ liệu phức do người sử dụng định nghĩa. Các cấu trúc này thường được khai báo ở phần đích đã được xác định extern far float for đầu CT. trong chương trình. goto huge if int c. Khai báo hàm và/hoặc nguyên mẫu hàm CT C được cấu trúc bởi các hàm. Hàm là 1 modul con trong một CT. Nó có thể nhận tham số thực hiện và trả về kết quả cho nơi gọi hàm. Thân của một hàm được chia interrupt long near pascal làm hai phần: khai báo biến và lệnh thực hiện . Mỗi câu lệnh trong chương trình C phải được kết thúc bằng một dấu chấm phẩy ‘;’. Chúng ta có thể tạo một khối lệnh register return short signed bằng cách đặt chúng trong cặp dấu {}. Thân hàm cũng phải được đặt trong cặp dấu này. sizeof static struct switch d. Khai báo biến Trong một chương trình C có thể khai báo biến dạng tổng thể hay cục bộ (biến của typedef union unsign void một hàm, một khối lệnh ). Một biến tổng thể được khai báo bên ngoài hàm và nó có thể sử dụng trong tất cả các hàm của chương trình. Ngược lại biến cục bộ chỉ có thể ed sử dụng trong phạm vi nơi nó được khai báo. volatile while Cao Tuan Dung 13 Cao Tuan Dung 14 Đối tượng cout Đối tượng cout C++ sử dụng đối tượng này để hiển thị thông tin lên màn hình cout không tự xuống dòng ở cuối dòng lệnh. Muốn xuống dòng cout được hiểu là đối tượng ra chuẩn, có nhiệm vụ kết xuất thông tin ra thiết dùng endl hoặc ký tự n bị ra chuẩn. cout phân biệt các thông tin cần in ra nằm ở các dòng lệnh khác #include <iostream> nhau using namespace std; #include <iostream> using namespace std; void main(void) { cout << “Cac mat hang ban chay nhatquot;; void main(void) cout << “thang Sau la:quot;; { cout << “Dia Gamesquot;; cout << “Cac mat hang ban chay nhatquot;; cout << “Ca phequot;; cout << “thang Sau la:“ << “Dia Games“<< “Ca phequot;; cout << quot;Aspirinquot;; cout << endl << quot;Aspirin“; } Kết quả màn hình: Cac mat hang ban chay nhatthang Sau la: } Dia GamesCa pheAspirin; Cao Tuan Dung 15 Cao Tuan Dung 16 4
  5. 5. Các bước biên dịch Công cụ biên dịch Soạn thảo: Các chương trình soạn thảo văn bản vi, emacs Các môi trường phát triển tích hợp: MS Visual C++, Boland C++ Builder, K Develop Biên dịch dòng lệnh dùng g++ g++ -g –Wall main cpp –lm –o main g++ -g –c Wall a.cpp g++ -g –c Wall b.cpp g++ -g –o main a.o b.o -lm Cao Tuan Dung 17 Cao Tuan Dung 18 Hello.cpp #include <iostream.h> int main (void) LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C++ { cout << quot;Hello Worldnquot;; CHƯƠNG II: KIỂU DỮ } Hello.cpp C++ Program C++ TRANSLATOR C Code C COMPILER LIỆU, TÊN, BIỂU THỨC C++ C++ Object Program NATIVE Code Hello.obj COMPILER Bộ môn Công nghệ phần mềm Execut- Khoa Công nghệ Thông tin, ĐHBK Hà nội LINKER able Hello.exe Cao Tuan Dung 19 5
  6. 6. Các kiểu dữ liệu cơ bản Tiền tố chỉ định dấu Kiểu dữ liệu Số Phạm vi có dấu Phạm vi không dấu Khai báo kiểu dữ liệu không dấu : thêm unsigned vào phía trước byte kiểu dữ liệu, ngược lại nếu là có dấu thì ta thêm từ khoá signed. Ngầm định : signed. char 1 -128 - 127 0 - 255 Ví dụ: short 2 -32.768 - 32.767 0 - 65.535 unsigned int x; /* biến nguyên không dấu */ long 4 -2.147.483.648 - 2.147.483.647 0 - 4.294.967.295 signed int y; /* biến nguyên có dấu */ int 2/4 Tùy thuộc môi trường ( Dos, wind) int z; /* biến nguyên có dấu */ float 4 3,4 E -/+38 (7 digits) char c; c = ‘A’; /* thực chất c = 65 do ‘A’ có mã ASCII là 65 */ double 8 1,7 E -/+308 (15 digits) không có Như vậy chúng ta có thể thấy kiểu dữ liệu cơ bản của C chỉ bao long double 10 1.2 E -/+ 3268 (19 digits) gồm hai loại số nguyên và số thực. Tất các các loại dữ liệu khác đều bool 1 True/False - Kiểu mới của C++ được quy về cách biểu diễn số. Với C++ còn có thêm kiểu bool và wchar 2 Kiểu ký tự 16 bits để lưu các ký tự wchar UNICODE ( Mới của C++) Cao Tuan Dung 21 Cao Tuan Dung 22 Toán tử sizeof Ví dụ về kiểu ký tự Lấy kích thước một kiểu dữ liệu hay một biến nào đó. #include <iostream> using namespace std; cout << “The size of an integer is “ << sizeof(int); void main(void) void main (void) { { char letter; long double apple; cout << “The size of an integer is “ << letter = 65; //letter = 'A'; sizeof(int); cout << letter << endl; cout << “ bytes.n”; letter = 66; //letter = 'B'; cout << “The size of a long integer is “ << cout << letter << endl; sizeof(long); } cout << “ bytes.n”; cout << “An apple can be eaten in “ << Kết quả: sizeof(apple); A cout << “ bytes!n”; B } Cao Tuan Dung 23 Cao Tuan Dung 24 6
  7. 7. Chương trình minh họa Hằng số #include <iostream> using namespace std; Biểu diễn hằng số Trong CT, để gán giá trị cho một biến ta phải void main(void) dùng các hằng số. Với mỗi loại dữ liệu ta có { cách viết hằng số khác nhau. int checking; unsigned int miles; a. Hằng nguyên long days; Dạng thập phân: 12345 checking = -20; miles = 4276; Dạng hexa: 0xFFFF (bắt đầu bằng 0x) days = 184086; Dạng bát phân: 0125 (bắt đầu bằng 0) cout << quot;We have made a long journey of quot; << miles; b. Hằng thực cout << quot; miles.nquot;; cout << quot;Our checking account balance is quot; << checking; Dạng dấu phẩy tĩnh: 1.234 cout << quot;nExactly quot; << days << quot; days ago Columbus quot;; Dạng dấu phẩy động: 1234E-3 (=1234x10-3) cout << quot;stood on this spot.nquot;; } Cao Tuan Dung 25 Cao Tuan Dung 26 c. Hằng ký tự Khai báo hằng Dạng kí tự: 'A' Dạng mã ASCII: '65' Có 2 cách khai báo hằng : Ngoài ra một số kí tự đặc biệt khác được viết theo quy ước: Dùng chỉ thị tiền xử lý define ‘’ kí tự #define CONSTNAME Value ‘'’ kí tự ‘ Ví dụ : #define PI 3.141516 ‘quot;’ kí tự “ #define NEWLINE ‘n’ ‘0’ kí tự NULL (mã 0) Dùng từ khoá const trong chương trình ‘n’ kí tự xuống dòng (mã 13) const typename CONSTNAME = Value; ‘t’ kí tự tab (mã 9) Ví dụ : const int SOHS = 100; ‘a’ kí tự rung chuông (mã 7) const float PI = 3.1416; Độ dài của tên (Hằng, biến, hàm … ) trong C++ không có giới d. Hằng xâu hạn, tuy nhiên một số CT dịch chỉ xác định 32 ký tự đầu, các ký Một xâu trong ngôn C là một mảng các kí tự có kí tự tự còn lại bỏ qua NULL đánh dấu kết thúc xâu. Hằng xâu phải được biểu Sử dụng hằng (đặt tên) khi chương trình sử dụng lặp đi lặp lại diễn trong cặp dấu nháy kép (ví dụ, quot;DHBKHNquot;). giá trị này nhiều lần. Cao Tuan Dung 27 Cao Tuan Dung 28 7
  8. 8. Biến Typename là tên các kiểu dữ liệu có sẵn hoặc kiểu dữ liệu do người dùng định nghĩa Biến là một khái niệm cực kỳ quan trọng của các NNLT. Danh sách biến là các biến đặt cách nhau bằng Là dùng để lưu các giá trị có thể thay đổi trong quá trình thực hiện, tính toán của CT dấu phẩy (,). Vì đây là lệnh khai báo, nên kết Là một vùng bộ nhớ được dành sẵn có kích thước tuỳ thúc bằng ; thuộc kiểu của biến. Bộ nhớ nay lưu các giá trị trong quá Có thể khai báo và đồng thời khởi tạo giá trị cho trình thực hiện của biến các biến như ví dụ sau : Biến có các phạm vi hoạt động khác nhau Tổng thể : Nằm ngoài các hàm int a,b,c = 10, d,e,f = 20, Địa phương : Trong một hàm hoặc một khối lệnh : chỉ có thể sử g,h = 30; dụng kể từ khi được khai bao và trong phạm vi của hàm hoặc khối lệnh đó mà thôi float x,y,z =2.5; Để khai báo biến ta đơn giản chỉ cần chỉ ra kiểu dữ liệu int m1= 10, m2; char ch=‘C’; và tên biên theo cú pháp sau : Như trên ta thấy, có thể khai báo trên nhiều hàng,hoặc TypeName VarList; 1 hàng nhiều lênh, miễn là kết thúc bằng (;) Cao Tuan Dung 29 Cao Tuan Dung 30 Biểu thức và toán tử Các toán tử số học Biểu thức được xây dựng trên cơ sở kết hợp các biến và hằng số với các toán tử đê tính toán giá trị mới. Bởi kiểu dữ liệu của C chỉ là số nên kết quả của một biểu thức cũng luôn là một số. Các biểu thức thường được dùng trong : Vế phải của phép gán Các biểu thức điều kiện của các lệnh rẽ nhánh, lặp Đối số của các hàm Chỉ số của mảng … C++/C có rất nhiều loại biểu thức, dựa trên các Các toán tử toán học có thể áp dụng cho các toán hạng là biến, hằng số hoặc là loại toán tử khác nhau. mộtbiểu thức con. Riêng toán tử % chỉ áp dụng cho hai số kiểu nguyên. Kết quả của biểu thức phụ thuộc vào kiểu dữ liệu của hai toán hạng. Nếu hai toán hạng đều là số nguyên => kết quả là một số nguyên. Cao Tuan Dung 31 Cao Tuan Dung 32 8
  9. 9. Toán tử quan hệ (so sánh) Toán tử logic Các toán tử quan hệ áp dụng được cho các biến, hằng số và Các toán tử so sánh cũng có thể áp dụng cho các toán biểu thức con trả về giá trị số. Nếu toán hạng có giá trị 0 thì hạng là biến, hằng số hoặc là một biểu thức con. Kết được coi như là một mệnh đề sai, khác 0 cho một mệnh đề quả của biểu thức so sánh luôn trả về kết quả là 1 thể đúng. Giá trị biểu thức thể hiện kết quả của kết hợp logic hai hiện phép so sánh đúng hoặc 0 thể hiện phép so sánh sai mệnh đề, 1 nếu kết hợp logic là đúng, 0 cho trường hợp sai. Ví dụ 3<7 && 8>6 cho kết quả là 1, !3 cho giá trị 0. Cao Tuan Dung 33 Cao Tuan Dung 34 Toán tử trên bit Nhóm toán tử gán Trong ngôn ngữ C++ phép gán cũng được coi là toán tử của biểu thức. Một biểu thức gán có dạng: <biến> = <biểu thức> Gán giá trị của biểu thức vế phải cho biến chỉ định ở vế trái. Biểu thức gán cũng trả về giá trị của biến sau khi gán. Chính vì lí do này mà ta có thể tạo nhiều phép gán liên tiếp trong một biểu thức. Ví dụ : int a, b, c; a = 5; // biểu thức gán được sử dụng làm lệnh gán //b = c = 2; // tương đương b=(c=2); Cần chú ý sự nhầm lẫn trong việc sử dụng toán tử gán (=) và toán tử toán tử trên bit thực hiện các phép tính số học trên bit với các số so sánh (==). Xét ví dụ dưới đây: nguyên. Các toán hạng dùng cho các toán tử trên bit phải là số int a = 5; nguyên. Kết quả của biểu thức hoàn toàn phụ thuộc vào phép tính trên int b = a == 5; // ~ b=(a==5) và khi đó b có giá trị 1 bit của các số hạng sau khi đã được phân tích thành số nhị phân. Ví dụ 5&4 cho kết quả là 4 (101&100=100), 5|3 cho kết quả là ?. Cao Tuan Dung 35 Cao Tuan Dung 36 9
  10. 10. cout << “So luong hang cưa hang 1 ban đuoc? quot;; Phép gán tổ hợp cin >> sold; A = B = C = D = 12; store1 = store1 – sold; Store1 = Store2 = Store3 = BegInv; cout << “So luong hang cưa hang 2 ban đuoc? quot;; cin >> sold; #include <iostream> store2 = store2 – sold; using namespace std; cout << “So luong hang cưa hang 3 ban đuoc? quot;; cin >> sold; void main(void) { store3 = store3 – sold; int begInv, sold, store1, store2, store3; cout << “cua hang 1 con lai: quot; << store1 << endl; cout << “cua hang 2 con lai: quot; << store2 << endl; cout << “Mot tuan truoc ba cua hang moi khai truongnquot;; cout << “cung mot thoi diem voi luong hang ban daunquot;; cout << “cua hang 3 con lai: quot; << store3 << endl; cout << “nhu nhau. Hay cho biet luong hang ban dau? quot;; } cin >> begInv; store1 = store2 = store3 = begInv; Cao Tuan Dung 37 Cao Tuan Dung 38 Toán tử thu gọn Toán tử tăng giảm Cao Tuan Dung 39 Cao Tuan Dung 40 10
  11. 11. Toán tử tăng giảm Cao Tuan Dung 41 Cao Tuan Dung 42 Toán tử điều kiện Phép toán chuyển kiểu C/C++ hỗ trợ xây dựng một biểu thức điều kiện trong đó Việc chuyển đổi kiểu có thể xảy ra trong 2 trường hợp kết quả của biểu thức phụ thuộc vào một điều kiện kiểm Tự đông chuyển kiểu tra. Biểu thức này có dạng: Khi bT gồm các toán hạng khác kiểu => kiểu thấp hơn sẽ <biểu thức kiểm tra> ? <biểu thức 1> : <biểu thức 2> được chuyển thành kiểu cao hơn. VD ; 1.5 * 11 / 3 = ? 1.5 * (11 / 3 )= ? Khi thực hiện phép gán ; Giá trị của vế phải được chuyển Nếu <biểu thức kiểm tra> có giá trị đúng (khác 0) thì biểu thành kiểu của biến bên vế trái thức lấy giá trị của <biểu thức 1> còn không lấy giá trị Ép kiểu bằng cách dùng phép toán chuyển kiểu : của <biểu thức 2>. quy tắc ; ( tên kiểu ) Biểu thức ví dụ : n= 23.24; x= (int) n * 2 => x= ? Ví dụ: Muốn có giá trị thực trong phép chia 2 số nguyên thì phải dùng phép ép kiểu int a, b, max; Ví dụ : int a=10, b= 4; float kq; /* tính max của a, b bằng biểu thức điều kiện */ kq = ((float ) a) / b; => kq= ? max = a>b ? a: b; Chú ý là phép toán ép kiểu có độ ưu tiên cao hơn các phep toán khác vì vậy (int) 1.41 * 10 = ? # (int) (1.41 * 10)= ? Cao Tuan Dung 43 Cao Tuan Dung 44 11
  12. 12. Các hàm toán học Để sử dụng các hàm toán học ta dùng các hàm khai của thư viện toán khai báo trong tệp tiêu đề <cmath.h> Cao Tuan Dung 45 12

×