Giới thiệu kỹ thuật lập trình hướng đối tượng; các khái niệm về hướng đối tượng, như đối tượng, lớp đối tượng, thuộc tính của đối tượng, phương thức của đối tượng, truy xuất thuộc tính đối tượng; so sánh giữa C và C++; cách khai báo lớp đối tượng bằng C++, ...
1 Chương 1: GIỚI THIỆU VỀ CÁC PHƯƠNG PHÁP LẬP TRÌNH 1.1 LẬP TRÌNH TUYẾN TÍNH 1.2 LẬP TRÌNH HƯỚNG CẤU TRÚC 1.2.2 Đặc trưng lập trình cấu trúc 1.2.2 Phương pháp thiết kế xuống (top-down) 1.3 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Chương 2: C++ SO SÁNH GIỮA C++ VÀ C 2.1 Một số khái niệm phép toán C++: 2.1.1 Từ khóa 2.1.2 Lời thích 2.1.3 Nhập xuất liệu 2.1.4 Chuyển đổi kiểu liệu 10 2.1.5 Các kiểu liệu 10 2.2 Các cấu trúc điều khiển cấu trúc lặp C++ 11 2.2.1 Cấu trúc if else 11 2.2.2 Cấu trúc switch 11 2.2.3 Cấu trúc điều kiển while 13 2.2.4 Cấu trúc điều khiển … while 13 2.2.5 Cấu trúc điều kiển for 14 2.3 CON TRỎ VÀ MẢNG 14 2.3.1 KHÁI NIỆM CON TRỎ 15 2.3.1.1 Khai báo trỏ 15 2.3.1.2 Sử dụng trỏ 15 2.3.2 CON TRỎ VÀ MẢNG 17 2.3.2.1 Con trỏ mảng chiều 17 2.3.2.2 Con trỏ mảng nhiều chiều 23 2.3.3 CẤP PHÁT BỘ NHỚ ĐỘNG 24 2.3.3.1 Cấp phát nhớ cho biến 24 2.3.3.2 Cấp phát nhớ cho mảng động chiều 25 2.3.3.3 Cấp phát nhớ cho mảng động nhiều chiều 27 2.4 HÀM TRONG C++ 28 2.4.1 Cách khai báo hàm 28 2.4.2 Hàm void: hàm không trả giá trị 28 2.4.3 Các hình thức chuyển đổi tham số 29 a Chuyển đổi tham trị 29 b Chuyển tham chiếu 29 c Chuyển trỏ 30 2.4.4 Nạp chồng hàm 31 2.4.5 Mảng tham số hàm 31 2.5 BÀI TẬP 32 Chương 3: KIỂU DỮ LIỆU CẤU TRÚC 36 3.1 ĐỊNH NGHĨA CẤU TRÚC 36 3.1.1 Khai báo cấu trúc 37 3.1.2 Cấu trúc lồng 37 3.1.3 Định nghĩa cấu trúc với từ khóa typedef 38 3.2 THAO TÁC TRÊN CẤU TRÚC 39 3.2.1 Khởi tạo giá trị ban đầu cho cấu trúc 39 3.2.2 Truy cập đến thuộc tính cấu trúc 40 3.3 CON TRỎ CẤU TRÚC VÀ MẢNG CẤU TRÚC 44 3.3.1 Con trỏ cấu trúc 44 3.3.2 Mảng cấu trúc 47 3.4 BÀI TẬP 51 Chương 4: GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 53 4.1 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG LÀ GÌ ? 53 4.1.1 Lập trình hướng thủ tục (Procedure Oriented Programming- POP) 53 4.1.2 Trừu tượng hoá (abstraction) 54 4.1.3 Lập trình hướng đối tượng (Object Oriented Programming- OOP) 54 4.2 MỘT SỐ KHÁI NIỆM TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 55 4.2.1 Lớp đối tượng lớp 55 4.2.2 Sự đóng gói ( Encapsulation ) 56 4.2.3 Tính kế thừa ( inheritance ) 57 4.2.4 Tính đa hình (polymorphism) 58 4.3 CÁC BƯỚC XÂY DỰNG MỘT CHƯƠNG TRÌNH HƯỚNG ĐỐI TƯỢNG 59 Chương 5: LỚP VÀ ĐỐI TƯỢNG CỦA LỚP 59 5.1 KHAI BÁO VÀ CÀI ĐẶT MỘT LỚP 59 5.1.1 Cách khai báo lớp 59 5.1.2 Khai báo đối tượng 60 5.1.3 Cài đặt lớp 60 5.1.4 Cách truy cập đến thành phần ( thuộc tính phương thức ) đối tượng thuộc lớp 61 5.1.5 Một số ví dụ 61 5.2 THUỘC TÍNH TRUY CẬP 63 5.2.1 Thuộc tính private 63 5.2.2 Thuộc tính public 64 5.2.3 Thuộc tính protected 64 5.3 HÀM FRIEND VÀ LỚP FRIEND 65 5.3.1 Hàm friend 65 5.3.2 Lớp friend 68 5.4 CON TRỎ THIS 69 5.5 PHƯƠNG THỨC THIẾT LẬP VÀ PHƯƠNG THỨC HỦY BỎ 70 5.5.1 Phương thức thiết lập (constructor) 70 5.5.2 Phương thức hủy bỏ (destructor) 71 5.6 LỚP NHƯ LÀ THÀNH VIÊN CỦA LỚP KHÁC 72 5.7 CÁCH TỔ CHỨC VA LIÊN KẾT CÁC FILE TRONG C++ 74 5.8 BÀI TẬP 75 Chương 6: ĐA NĂNG HÓA TOÁN TỬ 77 6.1 ĐA NĂNG HĨA TỐN TỬ LÀ GÌ ? 77 6.1.1 Đa hóa tốn tử (Operator Overloading) 77 6.1.2 Ví dụ 77 6.2 CÁC NGUYÊN TẮC CƠ BẢN CỦA ĐA NĂNG HÓA TÓAN TỬ 78 6.2.1 Các toán tử C++ 78 6.2.2 Các nguyên tắc 79 6.3 ĐA NĂNG HĨA TỐN TỬ MỘT NGƠI VÀ TỐN TỬ HAI NGƠI 80 6.3.1 Đa hóa tóan tử ngơi ( unary operator ) 80 6.3.2 Đa hóa tóan tử hai ngơi (binary operator) 81 6.3.3 Đa hóa số toán tử đặc biệt 84 6.4 BÀI TẬP 85 Chương 7: TÍNH THỪA KẾ 86 7.1 GIỚI THIỆU CHUNG 86 7.2 CACH XAY DỰNG LỚP THỪA KẾ 86 7.2.1 Thừa kế đơn 86 7.2.2 Các hình thức kế thừa 90 7.2.3 Đa kế thừa 91 7.2.4 Các lớp sở ảo ( Virtual base classes ) 93 7.3 PHƯƠNG THỨC THIẾT LẬP VÀ PHƯƠNG THỨC HỦY BỎ TRONG LỚP THỪA KẾ 94 7.3.1 Thứ tự thực phương thức thiết lập phương thức hủy bỏ 94 7.3.2 Các phương thức thiết lập có tham số hình thức 95 7.4 PHƯƠNG THỨC ẢO (VIRTUAL FUNCTION) 95 7.4.1 Phương thức ảo/ hàm ảo ( virtual function ) 95 7.4.2 Cách thể phương thức ảo 95 7.4.3 Lớp trừu tượng 96 7.5 BÀI TẬP 96 Chương 8: TEMPLATE VÀ EXCEPTION 97 8.1 HÀM TEMPLATE ĐƠN GIẢN 97 8.2 HÀM TEMPLATE CÓ NHIỀU THAM SỐ CÙNG KIỂU 99 8.3 HÀM TEMPLATE CÓ NHIỀU THAM SỐ KHÁC KIỂU 99 8.4 LỚP TEMPLATE ĐƠN GIẢN 100 8.5 PHÉP LOẠI TRỪ ( Exception) 102 8.5.1 Giới thiệu 102 8.5.2 Cú pháp 102 8.6 BÀI TẬP 105 Chương 1: GIỚI THIỆU VỀ CÁC PHƯƠNG PHÁP LẬP TRÌNH 1.1 LẬP TRÌNH TUYẾN TÍNH Đặc trưng lập trình tuyến tính tư theo lối Chương trình thực theo thứ tự từ đầu đến cuối, lệnh lệnh kết thúc chương trình Đặc trưng Lập trình tuyến tính có đặc trưng: - Đơn giản: chương trình tiến hành đơn giản theo lối - Đơn luồng: luồng công việc nhất, công việc thực luồng Tính chất - Ưu điểm: tính đơn giản, lập trình tuyến tính ứng dụng cho chương trình đơn giản, dễ hiểu - Nhược điểm: với ứng dụng phức tạp, ta lập trình tuyến tính để giải Ngày nay, lập trình tuyến tính tồn module nhỏ phương pháp lập trình khác Ví dụ, chương trình lập trình cấu trúc, lệnh thực từ đầu đến cuối chương trình 1.2 LẬP TRÌNH HƯỚNG CẤU TRÚC 1.2.2 Đặc trưng lập trình cấu trúc Trong lập trình cấu trúc, chương trình chia nhỏ thành chương trình chương trình thực cơng việc xác định Chương trình gọi đến chương trình theo giải thuật, cấu trúc xác định chương trình Các nơn ngữ lập trình cấu trúc phổ biến Paxcal, C C++ Riêng C++, ngồi việc có đặc trưng lập trình cấu trúc kế thừa từ C, có đặc trưng lập trình hướng đối tượng Cho nên C++ gọi ngơn ngữ lập trình cấu trúc, hướng đối tượng Đặc trưng Đặc trưng lập trình cấu trúc thể mơi quan hệ: Chương trình = Cấu trúc liệu + Giải thuật Trong đó: - Cấu trúc liệu cách tổ chức liệu cho việc xử lý hay nhiều chương trình - Giải thuật quy trình để thực công việc xác định Trong chương trình, giải thuật có quan hệ phụ thuộc vào cấu trúc liệu: - Một cấu trúc liệu phù hợp với số hạn chế giải thuật - Nếu thay đổi cấu trúc 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 cấu trúc liệu định Tính chất - Mỗi chương trình gọi thực nhiều lần chương trình - Các chương trình gọi đến để thực thứ tự bất kỳ, tùy 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 chương trình - Các ngơn ngữ lập trình cấu trúc cung cấp số cấu trúc lệnh điều khiển chương trình Ưu điểm - Chương trình dễ hiểu, dễ theo dõi - Tư giải thuật rõ ràng Nhược điểm - 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 liệu, đó, thay đổi cấu trúc liệu, phải thay đổi giải thuật - Không phù hợp với phần mềm lớn: tư cấu trúc với giải thuật phù hợp với toán nhỏ, nằm phạm vi module 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 việc giải mối quan hệ vĩ mô module phần mềm Vấn đề lập trình cấu trúc 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 mục đích 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, từ tổng qt đến chi tiết theo đó, tốn chia thành toán nhỏ Mỗi tốn lại chia nhỏ tiếp, có thể, thành tốn nhỏ q trình gọi q trình làm dần q trình dừng lại tốn không cần chia nhỏ thêm nghĩa tốn giải chương trình với giải thuật đơn giản Ví dụ: sử dụng phương pháp top-down để giải tốn xây dựng nhà Ta phân rã toán theo bước sau: - Ở mức thứ nhất, chia toán xây nhà thành tố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ứ việc làm móng nhà phân rã tiếp thành cơng việc đào móng, gia nền, làm khung sắt, đổ bê tong; Việc gia cố phân rã thành , … Q trình phân rã dúng mức này, cơng việc thu đo đạc, cắm môc, dây, đào … thực ngay, khơng cần chia nhỏ thêm Lưu ý: Cùng sử dụng phương pháp top-down với tốn, cho nhiều kết khác Nguyên nhân khác tiêu chí để phân rã toán thành toán 1.3 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Trong lập trình hướng đối tượng: - Coi thực thể chương trình đối tượng sau trừu tượng hóa đối tượng thành lớp đối tượng - Dữ liệu tổ chức thành thuộc tính lớp Ta ngăn chặn việc thay đổi tùy tiện liệu chương trình cách giới hạn truy nhập cho phép truy nhập liệu thông qua đối tượng, thông qua phương thức mà đối tượng cung cấp … - Quan hệ đối tượng quan hệ ngang hàng quan hệ kế thừa: Nếu lớp B kế thừa từ lớp A lớp A gọi lớp sở B gọi lớp dẫn xuất Ngơn ngữ lập trình hướng đối tượng phổ biến Java, C++, C# … Mặc dù C++ có đặc trưng lập trình hướng đối tượng khơng phải ngơn ngữ lập trình hướng đối tượng Đặc trưng Lập trình hướng đối tượng có đặc trưng bản: - Đóng gói liệu: liệu ln tổ chức thành thuộc tính lớp đối tượng Việc truy nhập đến liệu phải thông qua phương thức đối tượng lớp - Sử dụng lại mã nguồn: Việc sử dụng lại mã nguồn thể thông qua chế kế thừa Cơ chế cho phép lớp đối tượng kế thừa từ lớp đối tượng khác Khi đó, lớp dẫn xuất, sử dụng phương thức (mã nguồn) lớp sở mà không cần phải định nghĩa lại Ưu điểm - Khơng nguy liệu bị thay đổi tự chương trình Vì liệu đóng gói vào đối tượng Nếu muốn truy cập vào liệu phải qua phương thức cho phép đối tượng - Khi thay đổi cấu trúc liệu đối tượng, không cần thay đổi mã nguồn đối tượng khác, mà cần thay đổi số thành phần đối tượng dẫn xuất điều hạn chế ảnh hưởng xấu việc thay đổi 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ì ngun tắc kế thừa cho phép lớp dẫn xuất sử dụng phương thức từ lớp sở phương thức 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 Chương 2: C++ SO SÁNH GIỮA C++ VÀ C 2.1 Một số khái niệm phép toán C++: 2.1.1 Từ khóa Ngồi số từ khóa C, C++ bổ sung thêm số từ khóa : private protected public class operator friend try new catch delete throw template this 2.1.2 Lời thích Trong C: lời thích đặt cặp dấu /* */ Trong C++: - Kiểu thích /* */ dùng cho khối thích lớn gồm nhiều dòng - Kiểu thích // dùng cho thích dòng 2.1.3 Nhập xuất liệu a Xuất liệu: Trong C: printf (“ dòng điều khiển”, [ biểu thức ]); Ví dụ 2.1: printf (“ \n phuong trinh co nghiệm kép x= %f” , -b/(2*a)); printf (”\n phuong trinh co nghiệm pbiệt x1= %f, x2=%f “, x1,x2); printf (”\n phuong trinh co nghiem x= %8.2 f “, -b/(2*a)); Trong C++: cout