HỌ C VIỆ N CÔ NG NGHỆ BƯU CHÍ NH VIỄ N THÔ NG CƠ SỞ TẠ I TP. HỒ CHÍ MINH Bà i giảng: LẬP TRÌNH H ƯỚ N G ĐO Á I T Ư N G Tà i liệ u dù ng cho hệ Đạ i họ c ngà nh Cô ng nghệ thô ng tin & Điệ n tử – Viễ n thô ng đã đượ c Hộ i đồ ng khoa họ c Khoa Cô ng nghệ thô ng tin 2 thô ng qua ngà y 16/1/2002 (Tập 1) Biên soạn: Th.S. NGUYỄ N VIỆ T CƯỜ NG LƯU HÀ NH NỘ I BỘ Tp. Hồ Chí Minh – Nă m 2002 ii Lời nói đầu Bài giảng được biên soạn dựa trên các tài liệu của Herbert Schildt và Bjarne Stroustrup do có tính sư phạm cao và dựa trên một số tài liệu khác. Nội dung bài giảng có 12 chương, giới thiệu các khái niệm căn bản, các nền tảng của lập trình hướng đối tượng (Object-Oriented Programming) bao gồm : • tính đóng gói (Encapsulation) • tính kế thừa (Inheritance) • tính đa hình (Polymorphism) • quá tải hàm và toán tử (Function & Operator Overloading) • template và điều khiển ngoại lệ (Exception Handling) • vấn đề phát triển hệ thống hướng đối tượng • minh họa một số ứng dụng của lập trình hướng đối tượng với C++ trong môi trường DOS và Windows. Ngôn ngữ lập trình C++ được sử dụng trong bài giảng nhằm minh họa các ý tưởng của lập trình hướng đối tượng, do đó các kiến thức về C++ được trình bày đan xen trong một số chương giúp sinh viên dễ dàng lónh hội các khái niệm khá trừu tượng của lập trình hướng đối tượng. Bài giảng không có tham vọng đi sâu mọi khía cạnh của lập trình hướng đối tượng, chỉ trình bày các kiến thức căn bản và qua các ví dụ minh họa hy vọng sẽ giúp ích cho sinh viên ngành công nghệ thông tin và điện tử viễn thông bước đầu tìm hiểu thế giới lập trình. Các ví dụ minh họa đã chạy tốt trên các trình biên dòch Borland C++ 4.5 hoặc Visual C++ 6.0 Bài giảng được phân làm hai tập, tập 1 từ chương 1 đến chương 8, tập 2 từ chương 9 đến chương 12. Rất mong các đồng nghiệp và các sinh viên đóng góp ý kiến xây dựng để bài giảng được hoàn thiện hơn trong các lần soạn thảo về sau. Tháng 8 năm 2001 Th. S. Nguyễn Việt Cường E-mail: nvc@ptithcm.edu.vn iii Mục lục Tập 1 Chương 1 Tổng quan về Lập trình hướng đối tượng I. Vài nét về sự phát triển của các ngôn ngữ lập trình 1 II. Các khái niệm cơ bản của lập trình hướng đối tượng 4 1. Lớp và Đối tượng (Class & Object) 4 2. Thông báo (Message) 5 3. Tính đóng gói (Encapsulation) 5 4. Tính kế thừa (Inheritance) 6 5. Tính đa hình (Polymorphism) 7 III. Tổng quan về ngôn ngữ lập trình hướng đối tượng C++ 7 1. Xuất/Nhập (Console I/O) 7 2. Chú thích (Comment) 10 3. Khái niệm về quá tải hàm (Function Overloading) 11 4. Các từ khoá (Keywords) trong C++ 14 Chương 2 Lớp, Đối tượng và Tính đóng gói 15 I. Lớp 17 II. Hàm tạo, hàm hủy 22 III. Tham số của hàm tạo 30 IV. Nội tuyến tự động 37 V. Gán đối tượng 39 VI. Truyền các đối tượng sang hàm 45 VII. Trả đối tượng từ hàm 53 VIII. Hàm friend 56 IX. Bài tập chương 2 62 Chương 3 Mảng , Con trỏ và Tham chiếu 67 I. Mảng các đối tượng 69 II. Con trỏ đối tượng 72 iv III. Con trỏ this 75 IV. Toán tử new và delete 78 V. Tham chiếu (reference) 86 VI. Truyền tham chiếu cho đối tượng 91 VII. Trả về các tham chiếu 95 VIII. Các tham chiếu độc lập và các hạn chế 98 IX. Bài tập chương 3 100 Chương 4 Quá tải hàm 103 I. Quá tải hàm tạo 105 II. Hàm tạo bản sao 109 III. Sử dụng các đối số mặc đònh (default argument) 119 IV. Sự quá tại và tính không xác đònh (ambiguity) 126 V. Điạ chỉ của hàm quá tải 130 VI. Bài tập chương 4 132 Chương 5 Quá tải toán tử 135 I. Quá tải toán tử 137 II. Quá tải toán tử nhò nguyên 138 III. Quá tải toán tử quan hệ & luận lý 144 IV. Quá tải toán tử đơn nguyên 146 V. Hàm toán tử friend 149 VI. Toán tử gán 155 VII. Bài tập chương 5 158 Chương 6 Tính kế thừa 163 I. Giới thiệu tính kế thừa 165 II. Điều khiển truy cập lớp cơ sở 171 III. Sử dụng các thành viên được bảo vệ 176 IV. Hàm tạo, hàm hủy và tính kế thừa 181 V. Tính đa kế thừa 189 VI. Lớp cơ sở ảo 196 VII. Bài tập chương 6 201 v Chương 7 Hệ thống Nhập/Xuất C++ 207 I. Cơ sở Nhập/Xuất C++ 209 II. Nhập/Xuất có đònh dạng 210 III. Sử dụng width(), precision() và fill() 218 IV. Sử dụng bộ thao tác Nhập/Xuất 220 V. Tạo bộ chèn 223 VI. Tạo bộ chiết 230 VII. Bài tập chương 7 234 Chương 8 Nhập/Xuất C++ nâng cao 237 I. Tạo Bộ thao tác Nhập/Xuất 239 II. Nhập/Xuất File 243 III. Nhập/Xuất File nhò phân không đònh dạng 251 IV. Các hàm Nhập/Xuất nhò phân 258 V. Truy cập ngẫu nhiên 261 VI. Kiểm tra trạng thái Nhập/Xuất 265 VII. Nhập/Xuất theo đơn đặt hàng và các File 269 VIII. Nhập/Xuất theo mảng 272 IX. Bài tập chương 8 277 Tập 2 Chương 9 Tính đa hình 281 I. Con trỏ và Lớp dẫn xuất 283 II. Dẫn nhập các hàm ảo 285 III. Các hàm ảo thuần túy 295 IV. Áp dụng đa hình 299 V. Bài tập chương 9 309 Chương 10 Template và điều khiển ngoại lệ 311 I. Hàm template 313 II. Lớp template 319 vi III. Điều khiển ngoại lệ 326 IV. Biến tónh 339 V. Từ khoá extern và asm 344 VI. Hàm chuyển kiểu 346 VII. Những khác biệt giữa C và C++ 349 VIII. Bài tập chương 10 350 Chương 11 Phát triển các hệ thống hướng đối tượng 351 I. Giới thiệu 353 II. Các mô hình hướng-thủ tục 354 III. Các công cụ phát triển hướng-thủ tục 357 IV. Mô hình hướng đối tượng 359 V. Các ký hiệu và đồ thò hướng đối tượng 361 VI. Các bước phân tích hướng đối tượng 365 VII. Các bước thiết kế hướng đối tượng 371 VIII. Cài đặt 378 IX. Mô hình nguyên mẫu 379 X. Tóm tắt 380 XI. Bài tập chương 11 381 Chương 12 Một số ứng dụng OOP 383 I. Ứùng dụng trên môi trường DOS 385 1. Sorted container example source file 385 2. Text cross referencing example 389 3. Updates and displays the contents of a mailing list 398 II. Ứùng dụng trên môi trường WINDOWS 411 1. Instructions for the IDE example MULTITRG.IDE 411 2. Common Dialogs example in C 419 3. Demo True Type fonts 427 4. Demo sound APIs 447 5. Creating a window application (TODO) 456 III. Đồ án môn học 479 vii Taứi lieọu tham khaỷo Saựch giaựo khoa [1] Bjarne Stroustrup, What is Object-Oriented Programming ? AT&T Bell Lab., 1991 (revised version), p1-21 [2] Menachem Bazian, Fundamentals of Object-Oriented Programming , Microsoft Corp., 1995. [3] Herbert Schildt, Teach Yourself C++, 3rd Edition, McGraw-Hill, 1997. [4] H. M. Deitel & P. J. Deitel C++ How to Program, 2 nd edition, Prentice Hall, 1998 [5] E. Balagurusamy, Object-Oriented Programming with C++, Tata McGraw-Hill, 1997. Saựch tham khaỷo [6] Herbert Schildt, C++ Nuts & Bolt : for Experienced Programmers , McGraw-Hill, 1997. [7] Herbert Schildt, C/C++ Programmer's Reference , McGraw-Hill, 1997. viii [8] Bjarne Stroustrup, The C++ Programming Language, (3 rd Edition) Addison-Wesley, 1997 [9] Bjarne Stroustrup, Why C++ is not just an Object-Oriented Programming Language, AT&T Bell Lab., Murray Hill, New Jersay, 1995 , 13 pages [10] Bjarne Stroustrup, An Overview of the C++ Programming Language The Handbook of Object Technology, CRC Press LLC, Boca Raton, 1999, 23 pages [11] Bjarne Stroustrup, Learning Standard C++ as a New Language , AT&T Bell Lab., 1999, 11 pages [12] Jeri R. Hanly, Essential C++ for Engineers and Scientists , Addison-Wesley, 1997 [13] Mark A. Terrible, Practical C++ , McGraw-Hill, 1994. [14] Gordon Dodrill, C++ Tutorial , Coronado Enterprises, 1994. [15] IEEE Computer, “Open Channel” Interview with Bjarne Stroustrup , IEEE, 1998. [16] C. Thomas Wu, An Introduction to Object-Oriented Programming with JAVA , McGraw-Hill, 1999. [17] Borland International, Inc. Borland C++, version 4.5, 1994. . của lập trình hướng đối tượng, do đó các kiến thức về C++ được trình bày đan xen trong một số chương giúp sinh viên dễ dàng lónh hội các khái niệm khá trừu tượng của lập trình hướng đối tượng. . hướng- thủ tục 357 IV. Mô hình hướng đối tượng 359 V. Các ký hiệu và đồ thò hướng đối tượng 361 VI. Các bước phân tích hướng đối tượng 365 VII. Các bước thiết kế hướng đối tượng 371 VIII. Cài đặt. • vấn đề phát triển hệ thống hướng đối tượng • minh họa một số ứng dụng của lập trình hướng đối tượng với C++ trong môi trường DOS và Windows. Ngôn ngữ lập trình C++ được sử dụng trong