Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 197 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
197
Dung lượng
3,53 MB
Nội dung
Khoa Công nghệ Thông tin Trường Cao đẳng Công nghiệp Huế GIÁO TRÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG C++ (Lưu hành nội bộ) Huế, tháng 06/2011 PHỤ LỤC GIỚI THIỆU MÔI TRƯỜNG PHÁT TRIỂN TÍCH HỢP IDE 10 CHƯƠNG NGÔN NGỮ LẬP TRÌNH C++ 22 1.1 Cấu trúc chương trình C++ 22 1.2 Biến kiểu liệu 25 1.2.1.Từ khóa 25 1.2.2 Kiểu liệu nguyên thủy 26 1.2.3 Khai báo biến 26 1.2.4 Phạm vi tác dụng biến 27 1.2.5 Khởi tạo giá trị cho biến 29 1.2.6 Khởi tạo giá trị cho biến tĩnh static 29 1.2.7 Giới thiệu xâu kí tự 30 1.3 Hằng 31 1.3.1 Hằng số nguyên 31 1.3.2 Hằng số thực có dấu chấm động 31 1.3.3 Hằng kí tự xâu kí tự 32 1.3.4 Hằng logic 33 1.3.5 Định nghĩa #define 33 1.3.6 Khai báo const 34 1.4 Toán tử 34 1.4.1 Toán tử gán 34 1.4.2 Toán tử thực phép toán số học 35 1.4.3 Toán tử gán hợp 36 1.4.4 Toán tử tăng giảm 36 1.4.5 Toán tử so sánh 37 1.4.7 Toán tử điều kiện 39 1.4.8 Toán tử phân tách 40 1.4.9 Toán tử dịch bit 41 Trang |2 C++ 1.4.6 Toán tử logic 38 1.4.10 Toán tử chuyển đổi kiểu liệu 43 1.4.11 Các toán tử khác 43 1.4.12 Thứ tự ưu tiên toán tử 43 1.5 Xuất – nhập 45 1.5.1 Xuất liệu chuẩn cout 45 1.5.2 Nhập liệu chuẩn cin 46 1.5.3 Nhập liệu nhờ lớp stringstream 48 1.6 Các cấu trúc lệnh điều khiển 49 1.6.1 Cấu trúc lệnh có điều kiện: if else 50 1.6.2 Cấu trúc lặp 52 1.6.3 Cấu trúc lựa chọn: switch 57 1.7 Hàm 61 1.7.1 Khai báo sử dụng hàm 62 1.7.2 Phạm vi tác dụng biến 65 1.7.3 Hàm không trả giá trị - Hàm void 66 1.7.4 Tham biến tham trị 67 1.7.5 Giá trị mặc định tham số hình thức 70 1.7.6 Chồng chất hàm 71 1.7.6 Hàm nội tuyến 72 1.7.7 Hàm đệ quy 72 1.8 Các kiểu liệu có cấu trúc 74 1.8.1 Mảng 74 1.8.2 Xâu kí tự 78 1.9 Con trỏ 78 1.9.1 Toán tử tham chiếu & 79 1.9.2 Toán tử tham chiếu ngược * 80 1.9.3 Khai báo biến trỏ 81 1.9.5 Các phép toán số học trỏ 85 1.9.6 Con trỏ trỏ vào trỏ 87 1.9.7 Con trỏ void 88 Trang |3 C++ 1.9.4 Con trỏ, mảng xâu kí tự 83 1.9.8 Con trỏ null 89 1.9.9 Con trỏ hàm 89 1.10 Bộ nhớ động 91 1.10.1 Toán tử new new[] 91 1.10.2 Toán tử delete delete[] 92 1.11 Kiểu liệu struct Con trỏ struct 93 1.11.1 Struct 93 1.11.2 Con trỏ struct 97 1.11.3 Struct lồng 98 1.11.4 Kích thước nhớ struct 98 1.12 Các kiểu liệu khác 99 1.12.1 Kiểu liệu tự định nghĩa 99 1.12.2 Kiểu liệu union thường 100 1.12.3 Kiểu liệu union ẩn danh 100 1.12.4 Kiểu liệu enum 101 CHƯƠNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 102 2.1 Lịch sử hình thành 102 2.2 Lớp đối tượng 107 2.3 Hàm tạo hàm hủy 110 2.4 Chồng chất hàm tạo 112 2.5 Hàm tạo chép 114 2.6 Tính đóng gói – Encapsulation 119 2.7 Con trỏ đối tượng 120 2.8 Lớp khai báo nhờ từ khóa struct union 121 2.9 Con trỏ this 121 2.10 Thành viên tĩnh – Từ khóa static 123 2.11 Hàm bạn lớp bạn 124 2.13 Tính kế thừa - Inheritance 132 2.14 Các mức truy cập 135 2.15 Tính đa kế thừa – Multiple Inheritance 137 Trang |4 C++ 2.12 Chồng chất toán tử 126 2.16 Tính đa hình – Polymorphism 138 2.17 Tính trừu tượng hóa - Abstraction 149 2.18 Hàm mẫu – Template Function 149 2.19 Lớp mẫu – Template class 150 CHƯƠNG NAMESPACE 154 3.1 Từ khóa namespace 154 3.2 Từ khóa using 154 3.3 Phạm vi namespace 156 3.4 Tái định danh cho namespace 156 3.5 Namespace std 157 CHƯƠNG NGOẠI LỆ 158 4.1 Câu lệnh try…catch 158 4.2 Câu lệnh throw 158 4.3 Thư viện chuẩn exception 158 CHƯƠNG LÀM VIỆC VỚI FILE 161 5.1 Mở file 161 5.2 Đóng file 163 5.3 File văn 163 5.4 Kiểm tra trạng thái cờ hiệu 164 5.5 Con trỏ get put 164 5.6 File nhị phân 166 5.7 Bộ đệm Đồng hóa 167 CHƯƠNG CÁC LỚP THƯ VIỆN 168 6.1 Lớp số phức complex 168 6.2 Lớp ngăn xếp stack 169 6.3 Lớp hàng đợi queue 170 6.3 Lớp vector 171 6.5 Lớp list 176 6.6 Lớp map 176 6.7 Lớp set 177 Trang |5 C++ 6.4 Lớp string 174 6.8 Các lớp thư viện nhập xuất 177 HƯỚNG DẪN THỰC HÀNH 184 BÀI THỰC HÀNH SỐ 184 BÀI THỰC HÀNH SỐ 184 BÀI THỰC HÀNH SỐ 185 BÀI THỰC HÀNH SỐ 186 BÀI THỰC HÀNH SỐ 186 BÀI THỰC HÀNH SỐ 187 BÀI TẬP NÂNG CAO 188 BÀI TẬP LỚN 194 DANH SÁCH HÌNH 196 TRA CỨU TỪ KHÓA 197 C++ TÀI LIỆU THAM KHẢO 198 Trang |6 GIỚI THIỆU Cấu trúc giáo trình Giáo trình chia làm chương chương chia làm mục khác Các chương xếp theo trình tự từ lập trình hướng thủ tục C++ đến lập trình hướng đối tượng lớp thư viện Độc giả truy cập vào mục từ phần phụ lục nằm đầu sách Nhiều mục bao gồm ví dụ để mô tả cách sử dụng Tôi khuyên bạn nên đọc ví dụ hiểu đoạn mã chương trình trước đọc chương Một cách thức tốt để tăng lượng kiến thức nhận chỉnh sửa, bổ sung mã lệnh dựa ví dụ mẫu, theo hướng tư của thân, để từ hiểu cách đầy đủ nội dung mà ta tiếp thu Sau đọc xong giáo trình, cung cấp số tập thực hành đề nghị để độc giả nên thử nghiệm Hãy giải tập này, chúng hữu ích giúp bạn cố lại kiến thức môn học hiểu sâu sắc phần lý thuyết Một điều mà độc giả cần lưu ý: đọc trang cuối sách, để nắm số thuật ngữ anh-việt tương ứng sử dụng giáo trình Tôi có gắng sử dụng tên gọi phù hợp với đại đa số giáo trình hành Tuy nhiên, độc giả nên nắm thuật ngữ tiếng anh tương ứng, để tham khảo thêm tài liệu chuyên môn tiếng anh Khi biên soạn giáo trình này, tránh khỏi sai sót Rất mong đóng góp ý kiến quý báu bạn độc bạn đồng nghiệp Mọi đóng góp xin liên hệ theo địa email: dnhthanh@hueic.edu.vn myhoangthanh@yahoo.com Hi vọng với ý kiến đóng góp bạn, giáo trình ngày hoàn thiện Chuẩn ANSI-C++ tổ chức tiêu chuẩn quốc tế thống đưa Nó thức mắt vào tháng 11 năm 1997 duyệt lại vào năm 2003 Tuy nhiên, ngôn ngữ C++ tồn trước thời gian dài (vào năm 1980) Trước đó, có nhiều trình dịch không hỗ trợ tính bao gồm chuẩn ANSI-C++ Giáo trình xây dựng chương trình dịch đại hỗ trợ đầy đủ chuẩn ANSI-C++ Tôi đảm bảo ví dụ hoạt động tốt độc giả sử dụng trình dịch hỗ trợ ANSIC++ Có nhiều chọn lựa, miễn phí phần mềm thương mại Trong giáo trình này, giới thiệu đến các bạn hai công cụ biên dịch C++ GCC MinGW – miễn phí Visual C++ - thương mại Trang |7 C++ Một vài ý tương thích C C++ Trình biên dịch Các ví dụ giáo trình xây dựng chủ yếu chế độ console (màn hình DOS) Điều có nghĩa sử dụng chế độ văn để hiển thị kết Mọi trình dịch C++ hỗ trợ chế độ dịch console Với môi trường phát triển tích hợp IDE cho C++ miễn phí, sử dụng chương trình Codeblocks Eclipse Chúng môi trường phát triển tích hợp hỗ trợ soạn thảo biên dịch C++ Chúng hỗ trợ môi trường GCC để biên dịch C C++ Với CodeBlocks, tải phần mềm địa bên dưới1 Đối với Eclipse, trình soạn thảo biên dịch ngôn ngữ lập trình chuyên nghiệp hoàn toàn miễn phí (vì ta cấu hình kết hợp với công cụ biên dịch khác để tạo môi trường phát triển tích hợp cho ngôn ngữ lập trình khác nhau) Chúng ta dùng để soạn thảo biên dịch Java, PHP, JSP, Python… hiển nhiên C/C++ Đây dự án mã nguồn mở, tiêu tốn hàng triệu đôla IBM Để tải thời điểm (năm 2010) Eclipse Helios, ta truy cập đến địa bên dưới2 Đối với Eclipse, nên sử dụng kết hợp với trình biên dịch C++ MinGW, dự án mở Chúng ta tải địa bên dưới3 Với Eclipse, công việc cấu hình ban đầu tương đối phức tạp Nhưng trình soạn thảo tuyệt vời Ta sử dụng để soạn thảo nhiều ngôn ngữ lập trình cách cài đặt thêm plugin hỗ trợ Nhiều nhà phát triển sử dụng Eclipse làm tảng cho việc phát triển ứng dụng mình: Embarcadero sử dụng để phát triển JBuider, Adobe sử dụng để phát triển Flash Buider nhiều hãng phần mềm tiếng khác Nếu lập trình viên Java, Eclipse lựa chọn bỏ qua Nếu phát triển Flash theo dự án mã nguồn mở từ Adobe, Eclipse lựa chọn hoàn hảo Nếu phát triển C/C++, với trình soạn thảo Eclipse lựa chọn không tồi Việc sử dụng thành thạo Eclipse lợi cho tiến hành nghiên cứu Java, lập trình Web, Flex, Python… sau http://www.codeblocks.org/downloads http://ftp.jaist.ac.jp/pub/eclipse/technology/epp/downloads/release/helios/R/eclipse-cpp-helioswin32.zip http://nchc.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-getinst/mingw-get-inst-20100831/mingw-get-inst-20100831.exe Trang |8 C++ Bên cạnh đó, giới thiệu môi trường phát triển tích hợp IDE Microsoft Visual Studio Đây trình biên dịch thương mại trình biên dịch chuyên nghiệp tiếng hệ điều hành Windows Ta sử dụng để phát triển ứng dụng NET ứng dụng Win32 Nếu muốn phát triển ứng dụng theo hướng Microsoft, ta nên sử dụng Visual Studio Phiên đến thời điểm VS 2010 Nhưng cần lưu ý rằng, nghiên cứu Visual C++, chọn lựa phiên dành cho Win32 mà ứng dụng CLI (common language infrastructure) C++ phát triển NET Và Visual C++ for NET có số khác biệt so với Visual C++ for Win32 Trang |9 MÔI TRƯỜNG PHÁT TRIỂN TÍCH HỢP IDE a) CodeBlocks Trước tiên, tìm hiểu cách tạo dự án, biên dịch tập tin C++ CodeBlocks Độc giả cần lưu ý rằng, CodeBlocks tổ chức công việc theo dự án Chúng ta biên dịch tập tin cpp cách đơn lẻ Tuy nhiên, làm việc theo dự án giúp ích cho nhiều làm việc với tác vụ lớn Đầu tiên khởi động codeblocks, sau vào File > New > Project Trong hộp thoại ra, chọn console application (Hình 1) Và nhấp Go, sau nhấp Next Trong hộp thoại tiếp theo, ta chọn C++ nhấp Next Hình – Tạo dự án CodeBlocks Hộp thoại yêu cầu điền thông tin dự án xuất Hãy điền tên dự án, vị trí lưu trữ dự án Sau nhấp Next Cuối nhấp Finish Trong cửa sổ quản lý dự án, ta nhấp đôi chuột vào tệp main.cpp Nội dung soạn thảo nhập vào tập tin Nếu ta muốn bổ sung tập tin khác lớp đối tượng, ta bổ sung chúng từ menu File > New Biên dịch chương trình: + Nhấp vào Build > Build and Run + Hoặc nhấp phím F9 HƯỚNG DẪN THỰC HÀNH BÀI THỰC HÀNH SỐ Nhập xuất Hàm C++ Hãy thực công việc sau đây: a Xây dựng chương trình gồm có hai phần: phần file header đặt tên tieude.h, phần chương trình main.cpp b Tất hàm chương trình cần phải khai báo prototype Các tiêu đề file đặt tệp tiêu đề Chương trình chứa hàm thực công việc sau hàm main - Sử dụng hàm nhập xuất để xây dựng hàm nhập vào xâu kí tự dạng kiểu liệu string Sau đó: + In xâu đảo ngược Ví dụ “Toi di hoc”, in “coh id ioT” Hàm gọi hàm DaoXau + In kí tự đảo ngược Ví dụ “Toi di hoc”, in “hoc di Toi” Hàm gọi hàm DaoTu - Nhập vào mảng số nguyên, in tổng phần tử chúng Hàm gọi hàm TinhTong - Sử dụng khai báo chồng chất hàm, để xây dựng hai hàm giải phương trình bậc phương trình bậc hai Tên gọi hai hàm GiaiPhuongTrinh - Sử dụng khai báo hàm với tham số mặc định để giải phương trình bậc phương trình bậc hai, hàm có tên gọi GiaiPhuongTrinhTSMD - Trong hàm main, thực công việc sau: in thông báo nhập vào xâu kí tự gọi hàm DaoXau DaoTu, nhập vào mảng số nguyên gọi hàm TinhTong Sử dụng hàm xuất nhập để đưa thông báo nhập hệ số cho phương trình Nếu hệ số c nhập vào 0, thực giải phương trình bậc nhất, c khác không thực giải phương trình bậc hai (giải phương trình cách gọi hàm xây dựng trên) BÀI THỰC HÀNH SỐ Xây dựng Lớp Làm việc với Đối Tượng Xây dựng lớp HangHoa gồm có phương thức thuộc tính sau: Tên gọi tenHang Mức truy cập private Loại Thuộc Giải thích Tên mặt hàng T r a n g | 184 ngaySanXuat private tính Ngày sản xuất donGia private Đơn giá soLuong private Số lượng SetTenHang public Thiết lập tên hàng GetTenHang public Tiếp nhận tên hàng SetNgaySanXuat public Thiết lập ngày sản xuất GetNgaySanXuat public Tiếp nhận ngày sản xuất Phương SetDonGia public Thiết lập đơn giá thức GetDonGia public Tiếp nhận đơn giá SetSoLuong public Thiết lập số lượng GetSoLuong public Tiếp nhận số lượng TinhTien public Tính tiền Các phương thức bao gồm setter getter Phương thức TinhTien phương thức dùng để tính số tiền mà khách hàng mua Tính tiền donGia*soLuong Xây dựng lớp KhachHang gồm phương thức thuộc tính sau: Tên gọi Mức truy cập Loại Giải thích username private Thuộc Tên tài khoản người dùng tính password private Mật người dùng SetUsername public Lập tài khoản người dùng GetUsername public Tiếp nhận tài khoản người dùng Phương SetPassword public Lập mật người dùng thức GetPassword public Tiếp nhận mật người dùng MuaHang public Mua hàng Các phương thức setter getter hoàn toàn tương tự Phương thức MuaHang triệu gọi phương thức thiết lập tên hàng, ngày sản xuất, tính tiền đối tượng HangHoa Phương thức mua hàng này, chấp nhận username password khách hàng nhập vào trùng với username password hệ thống BÀI THỰC HÀNH SỐ Hàm tạo, hàm tạo chép, hàm bạn, trỏ this T r a n g | 185 C++ Trong chương trình chính, tạo hai đối tượng hai lớp HangHoa KhachHang Username Password khách hàng nhập vào từ bàn phím Kiểm tra username password trùng với username password thiết lập sẵn tiến hành khởi tạo đối tượng KhachHang, ngược lại, hủy bỏ giao dịch in thông báo: “Xin loi, tai khoan cua quy khach khong ton tai he thong Xin lien he dang ki voi chi nhanh khach hang gan nhat” Trong trường hợp đăng nhập thành công, thực hành động mua hàng đối tượng khách hàng (thao tác mua nhập vào từ bàn phím) Lưu ý: thực hành chương này, cho phép sử dụng trỏ đối tượng để thực Mọi phương án sử dụng khai báo đối tượng thông thường không chấp nhận ! Quay trở lại với thực hành số Hãy tạo chương trình cách thay phương thức setter hàm tạo tương ứng Hãy sử dụng trỏ this trường hợp Bổ sung phương thức ResetHangHoa cho lớp HangHoa để đưa tham số mặc định cho thuộc tính (xâu kí tự thiết lập “”, số nguyên/thực thiết lập 0) Bổ sung phương thức HuyBo cho đối tượng KhachHang để hủy bỏ việc mua hàng Trong chương trình chính, tạo trỏ đối tượng để thực hành động mua hàng hành động hủy bỏ Xây dựng lớp điểm Point lớp hình tròn Round Sử dụng hàm random để tạo tọa độ ngẫu nhiên cho đối tượng điểm hàm tạo đối tượng điểm Cho trước tọa độ tâm đường tròn, bán kính Hãy đưa kết luận điểm khởi tạo nằm hay đường tròn Đây phương thức thành viên lớp hình tròn Khuyến khích: Nên sử dụng hàm bạn lớp bạn BÀI THỰC HÀNH SỐ Chồng chất Toán tử C++ Xây dựng lớp số phức lớp phân số Sử dụng chồng chất toán tử để thực thao tác tính toán sau: - Lớp số phức: phương thức khởi tạo (hoặc phương thức setter), phương thức hàm tạo chép, phương thức + (cộng hai số phức), - (trừ hai số phức), * (nhân hai số phức), / (chia hai số phức) phương thức tính modul argument số phức Xây dựng hàm chồng chất toán tử nhập/xuất liệu với lớp số phức - Lớp phân số: phương thức khởi tạo, phương thức hàm tạo chép, phương thức + (cộng hai phân số), phương thức – (trừ hai phân số), phương thức * (nhân hai phân số), phương thức / (chia hai phân số) Xây dựng hàm chồng chất toán tử nhập/xuất liệu với lớp phân số Xây dựng lớp HinhKhoi, chứa thuộc tính chiều cao (chieucao) Xây dựng hàm tạo tương ứng phương thức hàm tạo chép T r a n g | 186 C++ BÀI THỰC HÀNH SỐ Kĩ thuật thừa kế C++ Xây dựng lớp HinhKhoi1 thừa kế từ lớp HinhKhoi Bổ sung thêm thuộc tính chiều dài (chieudai) Bổ sung hàm tạo phương thức hàm tạo chép Xây dựng tiếp hàm tính thể tích cho HinhKhoi1 (bằng chieucao*chieudai2) Xây dựng lớp lớp HinhKhoi2 thừa kế từ lớp HinhKhoi1 Bổ sung thêm thuộc tính chiều rộng (chieurong) Bổ sung hàm tạo phương thức hàm tạo chép Quá tải hàm tính thể tích cho HinhKhoi2 (bằng chieucao*chieudai*chieurong) Xây dựng lớp HinhKhoi3 thừa kế từ lớp HinhKhoi Bổ sung thêm thuộc tính bán kính (bankinh) Bổ sung hàm tạo phương thức hàm tạo chép Xây dựng hàm tính thể tích cho HinhKhoi3 (bằng chieucao*Pi*bankinh2) BÀI THỰC HÀNH SỐ Lớp sở trừu tượng C++ Xây dựng lớp sở trừu tượng Vector chứa ba phương thức ảo túy: TinhDoDai (tính độ dài), SinGoc (tính sin góc hai Vector), TrucGiao (tìm vector trực giao – tức vector vuông góc với vector trên), hai thuộc tính thành viên tọa độ x y, hai phương thức setter (không sử dụng hàm tạo trường hợp này, lớp trừu tượng khả tạo thể hiện, hàm tạo không thừa kế); sử dụng phương thức tham chiếu getter Xây dựng lớp Vector2D thừa kế từ lớp sở trừu tượng Vector để thực thi phương thức ảo túy nêu Xây dựng lớp Vector3D thừa kế từ lớp sở trừu tượng Vector (bổ sung thêm tọa độ z phương thức getter, setter tương ứng) để thực thi phương thức ảo túy nêu C++ Trong đó, Vector2D vector chiều (chỉ có hai tọa độ x y); Vector3D vector chiều (có ba tọa độ x, y z) T r a n g | 187 BÀI TẬP NÂNG CAO Bài tập Xây dựng hàm để tính tổng sau đây: ( ) ( ( ) ) Trong đó: n , x k tham số nhập vào từ bàn phím Bài tập Khai báo chuỗi kí tự cách sử dụng trỏ Sau xây dựng hàm để thực câu sau: - Đếm số kí tự có giá trị a - Đảo xâu kí tự - Đảo từ - Đếm số từ - Nhóm kí tự loại Ví dụ: Xâu ban đầu: aaabbbaacbd Xâu in ra: 5a4b1c1d - Thuật toán nén liệu RLE (Run length Encoding) thuật toán nén không liệu lossless Nó sử dụng để nén ảnh định dạng bmp Thuật toán RLE thực đếm số kí tự giống liên tiếp, sau đó, thay toàn dãy kí tự giống số kí tự đếm sau kí tự tương ứng Ví dụ: Xâu ban đầu: aaaabbbbcdddAA Xâu sau nén: 4a4b1c3d2A + Hãy xây dựng hàm RLE để nén liệu Với liệu nhập vào từ bàn phím T r a n g | 188 + Hãy xây dựng hàm IRLE để giải nén liệu Với liệu nhập vào từ bàn phím Bài tập Xây dựng hàm thực chức sau mảng chiều hai cách: khai báo theo kiểu thông thường khai báo trỏ - Hàm nhập liệu cho mảng chiều - Hàm xuất liệu cho mảng chiều - Hàm tính tổng phần tử mảng - Hàm tính tổng phần tử mảng số nguyên tố - Hàm tính tổng phần tử mảng số phương - Hàm tính tổng số nguyên tố mảng lớn 10 nhỏ 100 - Hàm tính tổng phần tử mảng số phương chẵn - Hàm đếm số phần tử mảng số nguyên tố - Hàm đếm số phần tử mảng số phương - Hàm đếm số phần tử mảng số nguyên tố lớn 10 nhỏ 50 - Hàm đếm số phần tử mảng số phương chẵn - Hàm tìm kiếm số phần tử có giá trị x mảng - Hàm tính giá trị trung bình mảng - Hàm tìm số phần tử có giá trị nhỏ - Hàm tìm số phần tử có giá trị lớn - Hàm xếp mảng theo thứ tự tăng dần (có thể sử dụng thuật toán xếp bất kì) - Hàm tính giá trị trung bình phần tử mảng có giá trị chẵn - Hàm dồn tất phần tử chẵn phía, phần tử lẻ phía Ví dụ, mảng ban đầu là: kết - Hàm đẩy phần tử mảng lên n vị trí Ví dụ mảng ban đầu Nếu n = 2, mảng thu Bổ sung hàm main thư viện để nhận chương trình hoàn chỉnh Các hàm cần khai báo theo prototype T r a n g | 189 C++ - Hàm xác định phần tử có giá trị gần với giá trị trung bình mảng Bài tập Xây dựng hàm để thực chức sau mảng hai chiều hai cách khai báo: theo kiểu thông thường khai báo trỏ - Hàm nhập giá trị cho mảng hai chiều - Hàm xuất giá trị mảng hai chiều theo dạng ma trận - Hàm cộng hai ma trận - Hàm nhân hai ma trận - Hàm thay tất phần tử có giá trị lẻ ma trận thành - Hàm thay tất phần tử âm ma trận phần tử dương tương ứng - Hàm thay phần tử có giá trị nhỏ giá trị trung bình ma trận phần tử - Hàm tính lũy thừa ma trận vuông Các hàm yêu cầu xây dựng theo prototype Các ma trận (mảng hai chiều) tập ma trận vuông Bổ sung hàm main thư viện cần thiết để chương trình hoàn chỉnh Bài tập Hãy chọn lựa phương pháp phù hợp lập trình hướng đối tượng để lập trình giải toán sau a) Xây dựng lớp TamGiac (tam giác) gồm có ba cạnh với phương thức sau: - Các phương thức khởi tạo cho tam giác: không tham số, có tham số hàm tạo chép - Các phương thức Getter - Phương thức KiemTra biết có phải tam giác thực không - Phương thức tính diện tích tam giác tam giác thực - Các phương thức nhập/xuất cho tam giác Xây dựng theo toán tử b) Xây dựng lớp Diem (điểm) gồm có tọa độ x, y, z phương thức sau: - Các phương thức khởi tạo C++ - Các phương thức Getter - Phương thức tính khoảng cách hai điểm T r a n g | 190 Xây dựng lớp Vector gồm có hai thuộc tính tương ứng với hai đối tượng Diem (điểm đầu điểm mút) Hãy bổ sung phương thức sau cho lớp Vector: - Các phương thức khởi tạo - Các phương thức Getter - Phương thức tính độ dài vector - Phương thức cộng hai vector Xây dựng theo toán tử - Phương thức tính tích vô hướng hai vector - Phương thức tính cosin góc hai vector - Phương thức tính tích hữu hướng hai vector Xây dựng lớp HinhCau (hình cầu) gồm hai thuộc tính đối tượng Diem tương ứng với tâm hình cầu bán kính R Hãy bổ sung phương thức sau cho lớp HinhCau: - Các phương thức khởi tạo - Các phương thức Getter - Phương thức tính diện tích hình cầu - Phương thức xác định vị trí tương đối hình cầu điểm - Phương thức xác định vị trí tương đối hai hình cầu Yêu cầu chung: bổ sung hàm toán tử nhập xuất cho lớp đối tượng Bài Xây dựng lớp ConNguoi gồm có hai thuộc tính thành viên là: tên tuổi Các phương thức khởi tạo phương thức Getter tương ứng Lớp NhanVien thừa kế từ lớp ConNguoi, cách bổ sung thêm hai thuộc tính là: mã nhân viên, lương mức đóng góp (tính theo lương) Bổ sung phương thức khởi tạo phương thức Getter Một nhân viên bị sa thải, mức đóng góp họ nhỏ mức đóng góp chuẩn công ty T r a n g | 191 C++ Các công ty quản lý nhân viên Đối tượng CongTy có thuộc tính: tên công ty, mức đóng góp chuẩn, ngân sách có, nguồn thu theo tháng, nguồn chi theo tháng Giả sử nguồn chi không bao gồm chi phí trả lương cho nhân viên Đối tượng CongTy có phương thức tuyển dụng để tuyển thêm nhân viên, phương thức sa thải để sa thải nhân viên Một công ty tuyên bố phá sản vốn điều lệ họ bị âm Vốn điều lệ tổng ngân sách có cộng với mức đóng góp nhân viên trừ cho nguồn chi theo tháng trừ tiếp cho tổng lương chi trả cho toàn nhân viên Hãy xây dựng chương trình để thực thi mô tả Bài Hãy xây dựng chương trình ứng dụng theo mô tả sau - Lớp đối tượng người dùng gồm thuộc tính: username, password, câu hỏi bảo mật câu trả lời Bổ sung phương thức tương ứng cho phù hợp Khi chạy chương trình, người dùng nhập vào username password Nếu trùng khớp với username password tạo hệ thống thông báo đăng nhập thành công - Sau đăng nhập thành công, người dùng có quyền triệu gọi phương thức tính toán lớp số phức phân số (cần xây dựng thêm hai lớp này) - Nếu người dùng đăng nhập không thành công, yêu cầu họ xác minh có phải họ quên mật hay không câu hỏi bảo mật Nếu trả lời đúng, cho phép họ thay đổi mật - Nếu đăng nhập không thành công trả lời sai câu hỏi bảo mật, in thông báo “Bạn chưa phải thành viên”, chọn “y” để đăng kí chọn “n” để thoát Bài Mỗi đối tượng Shape Microsoft Word có có thuộc tính: màu viền, màu nền, nội dung văn bên trong, thứ bậc, tình trạng chọn hay không phương thức khởi tạo, thay đổi giá trị cho thuộc tính (phương thức setter) Hãy tạo mảng 10 phần tử Shape Các giá trị thứ bậc không trùng (và phân bố từ 0-9) Trong 10 đối tượng này, thời điểm, có đối tượng tình trạng chọn Nếu đối tượng tình trạng chọn, ta có quyền thay đổi giá trị cho Hãy bổ sung thêm phương thức cần thiết để thực yêu cầu Bài Gợi ý: Các lớp đối tượng mô hình bao gồm – Sinh viên, Giáo viên chủ nhiệm, Phòng Công tác học sinh sinh viên, Phòng Đào tạo, Phòng Tài chính, Khoa chuyên môn, Đoàn TN, Lớp, Phòng học, Môn học… T r a n g | 192 C++ Hãy phân tích mô hình quản lý sinh viên trường đại học Từ mô hình phân tích được, xây dựng chương trình quản lý sinh viên Trong mô hình này, yêu cầu quản lý không 10 lớp đối tượng Bài 10 Hãy phân tích theo hướng đối tượng mô hình quản lý Nhà nước thu nhỏ cho bên Từ mô hình phân tích đó, xây dựng chương trình để quản lý Nhà nước thu nhỏ Biết rằng, tương tác đối tượng có tính bắc cầu Bộ GD Sở GD Bộ Y tế Sở Y tế Bộ Công Thương Bộ Quốc Phòng Bộ Nông Nghiệp Kế thừa Cơ sở Tương tác C++ Hình 17 – Mô hình tương tác quản lý Nhà nước T r a n g | 193 BÀI TẬP LỚN Dự án Phân tích, thiết kế xây dựng chương trình quản lý thư viện Trong chương trình này, cần đảm bảo chức sau đây: - Trong mô hình quản lý cần đảm bảo thông tin: mã sách, tên sách, tên tác giả, năm xuất bản, nhà xuất bản, số trang, giá số lượng - Cho phép bổ sung thêm nhiều sách - Cập nhập lại số lượng sách có người mượn/trả sách - Tìm kiếm sách theo tên tác giả tên sách - Kiểm tra tình trạng sách hay không - Chương trình thực thi hình Console Có menu tùy chọn Dữ liệu lưu trữ vào tập tin data.dat dạng mã hóa nhị phân Dự án Phân tích, thiết kế xây dựng chương trình quản lý website bán máy tính Trong chương trình trình này, cần đảm bảo chức sau đây: - Trong mô hình quản lý này, cần đảm bảo thông tin: mã hàng, màu sắc, nước sản xuất, hãng, giá tiền, số lượng, thời gian bảo hành, có cài đặt hệ điều hành hay không, địa khác hàng, số điện thoại khách hàng - Tìm kiếm mặt hàng theo tên hãng, giá tiền nước sản xuất - Kiểm tra tình trạng hàng hay không - Bổ sung (nhập thêm hàng) xóa bỏ (bán hàng) - Chương trình thực thi hình Console Có menu tùy chọn Dữ liệu lưu trữ vào tập tin data.dat dạng mã hóa nhị phân Dự án Phân tích, thiết kế xây dựng chương trình quản lý nhân viên công ty Trong chương trình trình này, cần đảm bảo chức sau đây: C++ - Trong mô hình quản lý này, cần đảm bảo thông tin: mã nhân viên, họ tên nhân viên, ngày tháng năm sinh, hệ số lương, năm bắt đầu công tác, tình trạng hôn nhân, phận làm việc - Tìm kiếm nhân viên theo họ tên - Thống kê số lượng nhân viên theo phận làm việc T r a n g | 194 - Bổ sung (tuyển dụng) xóa bỏ (kết thúc hợp đồng) - Chương trình thực thi hình Console Có menu tùy chọn Dữ liệu lưu trữ vào tập tin data.dat dạng mã hóa nhị phân Dự án Phân tích, thiết kế xây dựng game FarmVille (một game tiếng Facebook) Trong game này, cần đảm bảo chức sau đây: - Trong mô hình quản lý này, cần đảm bảo thông tin: người chơi – email, tên người chơi, tổng số tiền Các đối tượng game: tên đối tượng, trị giá, thời gian khởi tạo, thời gian thu hoạch - Tìm kiếm người chơi theo họ tên - Thống kê số tiền thu người chơi - Bổ sung người chơi đối tượng game - Khi thu hoạch đối tượng, trị giá đối tượng cập nhập vào cho tổng tiền người chơi, đồng thời đối tượng bị hủy Đối tượng thu hoạch nếu: thời gian – thời gian khởi tạo >= thời gian thu hoạch - Chương trình có menu điều khiển, không yêu cầu tạo giao diện đồ họa Ghi chú: Các sinh viên nộp đủ thực hành vào trước buổi thứ có hội nhận tập lớn Khi nhận tập lớn, yêu cầu bổ sung giảng viên, sinh viên cần thực thi thên yêu cầu sau: - Phân tích mô hình lên giấy (nộp in) C++ - Nộp chương trình hoàn chỉnh Trong đó, chương trình hoàn chỉnh tập tin word (*.doc; *.docx) phải ghi lên đĩa CD, bên đĩa có ghi: tên sinh viên, lớp “Bài tập lớn: Lập trình hướng đối tượng C++ Giảng viên hướng dẫn: ….” T r a n g | 195 DANH SÁCH HÌNH Hình – Tạo dự án CodeBlocks 10 Hình – Khởi tạo thân phương thức 11 Hình – Cấu hình MinGW Eclipse Helios 12 Hình – Chọn đường dẫn đến thư mục bin MinGW 12 Hình - Tạo dự án 13 Hình - Cấu trúc thư mục dự án 13 Hình - Biên dịch dự án 14 Hình - Hộp thoại tạo class 14 Hình - Giao diện tổng thể Visual Studio 2010 16 Hình 10 - Tạo dự án Win32 Console 17 Hình 11 - Win32 Application Wizard 17 Hình 12 - Bổ sung thêm tập tin 18 Hình 13 - Bổ sung thêm lớp đối tượng 19 Hình 14 - Tạo lớp Class Wizard 19 Hình 15 - Xem biểu đồ lớp 21 Hình 16.2 – Tham chiếu trỏ 79 Hình 17 – Mô hình tương tác quản lý Nhà nước 193 T r a n g | 196 TRA CỨU TỪ KHÓA MỘT SỐ THUẬT NGỮ ANH-VIỆT ĐƯỢC SỬ DỤNG TRONG GIÁO TRÌNH Nguyên tiếng Anh Abstract base class Abstraction Arithmetic operators Assignment operators Base class Bitwise operators Child class/SubClass Class Comma operators Compound assignment operator Conditional operators Encapsulation Exception Explicit type casting operators Increase and decrease operators Information hiding Inheritance Instance Logical operators Multiple inheritance Object Operator Operator overloading Overload Override Polymorphism Prototype Pure virtual function Reference Relational and equality operators Dịch sang tiếng Việt Lớp sở trừu tượng Tính trừu tượng Toán tử số học Toán tử gán Lớp sở/ Lớp cha Toán tử dịch bit Lớp Lớp Toán tử phân tách Toán tử gán hợp Toán tử điều kiện Tính đóng gói Ngoại lệ Toán tử chuyển đổi kiểu liệu Toán tử tăng giảm Che dấu/ẩn dấu thông tin Tính thừa kế/ Tính kế thừa Sự thể Toán tử logic Tính đa thừa kết/Tính đa kế thừa Đối tượng Toán tử Chồng chất toán tử Chồng chất Quá tải Tính đa hình Nguyên mẫu Hàm ảo túy Tham chiếu Toán tử quan hệ so sánh T r a n g | 197 TÀI LIỆU THAM KHẢO [1] Đoàn Xuân Ban Phân tích, thiết kế lập trình hướng đối tượng với C++, NXB Thống kê, 1997 [2] Nguyễn Đình Tê Hoàng Đức Hải, Giáo trình lý thuyết tập ngôn ngữ C++, NXB Giáo dục, 2006 [3] Phạm Văn Ất C++ lập trình hướng đối tượng, NXB Thống kê [4] Sir M Vasanji Road Object Oriented Programming with C++, Printed in India, 1st Edition – June 1999 [5] [6] Sharam Hekmat “C++ Programming”, Pragmatix Software Pt, 2004 [6] http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp Mục: XL C/C++ V8.0 for AIX Language Reference [7] http://msdn.microsoft.com/en-us/library/3bstk3k5(v=VS.100).aspx [8] Ivor Horton Beginning Visual C++ 2010 Wrox pub [9] Edward Scheinerman C++ for Mathematicians An introduction for Student and Professional Chapman & Hall/CRC [10] http://www.cplusplus.com/doc/tutorial T r a n g | 198 [...]... chương trình C+ + hay bất kì một chương trình trên một ngôn ngữ lập trình nào kh c, ta c n tuân thủ quy phạm định dạng mã nguồn C nhiều chuẩn m c cho c c định dạng mã nguồn: chuẩn Hungary, chuẩn l c đà Dù rằng, chúng không ảnh hưởng đến vi c biên dịch chương trình, nhưng chúng giúp người đ c có thể dễ hiểu chương trình c a chúng ta hơn Nếu ta không nắm vững c c quy phạm này thì c thể sử dụng ch c. .. T r a n g | 21 CHƯƠNG 1 NGÔN NGỮ LẬP TRÌNH C+ + CHƯƠNG 1 NGÔN NGỮ LẬP TRÌNH C+ + 1.1 C u tr c của một chương trình C+ + Một c ch th c tốt nhất để h c lập trình đó là hãy thử viết một chương trình đầu tiên Nếu chúng ta đã từng làm quen với một ngôn ngữ lập trình nào đó, thì ch c hẳn ai c ng biết đến ví dụ kinh điển c a một ngôn ngữ lập trình đó là chương trình “Hello, world !” Mã chương trình [1.] [2.]... hãy nhập tên c a tập tin và nhấp Ok Tệp tin tiêu đề h thường chứa c c khai báo prototype c a hàm ho c lớp Ngoài ra, nó c thể chứa c c hàm macro, c c khai báo hằng và biến toàn c c đư c sử dụng trong toàn bộ chương trình Tập tin cpp thường chứa phần thân c a c c hàm ho c lớp Khi T r a n g | 18 C+ + Hình 12 - Bổ sung thêm một tập tin làm vi c với c c dự án trong C+ +, chúng ta nên tách chương trình thành... đã c i một máy ảo Java Để tải về máy ảo Java, chúng ta c thể truy c p vào trang chủ c a Sun (nay là Oracle) tại địa chỉ sau đây4 Để xây dựng một chương trình C/ C++ trên Eclipse, chúng ta c n: C+ + - Eclipse Helios for C/ C++ (nếu phiên bản tải về là dành cho Java, ta c n phải c i đặt thêm plugin hỗ trợ); ho c có thể sử dụng một ấn bản c hơn c a Eclipse như Galileo, Europa… - C ng c biên dịch GCC –... đen Ctrl+Shift+\ Hủy bỏ vùng văn bản bị comment bởi khối comment Trên đây, tôi đã giới thiệu sơ qua hai chương trình soạn thảo miễn phí để lập trình C/ C++: CodeBlocks và Eclipse Với CodeBlocks, chỉ c n tải và c i đặt Môi trường hỗ trợ biên dịch GCC đã đư c tích hợp sẵn Với Eclipse, ta phải th c hiện c u hình để kết hợp với trình biên dịch GCC Nếu là người c nhiều trải nghiệm về máy tính, thì nên chọn... lệnh 1 C c biến toàn c c có thể đư c sử dụng trong toàn bộ chương trình, nó c thể đư c gọi trong c c hàm, trong hàm chính main C n biến c c bộ đư c khai báo trong khối lệnh nào, thì nó chỉ c thể đư c sử dụng trong khối lệnh đó Trong một số tình huống, biến c thể đư c khai báo trong dấu ngo c đơn (tình huống này thường gặp khi nghiên c u c c lệnh c c u tr c) , thì biến này c ng gọi là biến c c bộ for... Hình 6 - C u tr c thư m c của một dự án tượng sau đây trên thay c ng c c a Eclipse T r a n g | 13 C+ + src Hiển nhiên ta hoàn toàn không nhất thiết phải th c hiện theo như c u tr c thư m c này Tuy nhiên điều này sẽ làm cho dự án c a ta trở nên sáng sủa hơn rất nhiều Chúng ta c thể bổ sung thêm c c thư m c phụ kh c, nhưng nên tuân thủ c u tr c cây này (ví dụ khi c n phân biệt c c tập tin cpp thành... thư m c chung để chứa toàn bộ nội dung sau này, tôi tạm gọi thư m c này là thư m c src Trong thư m c src, hãy tạo hai thư m c, một thư m c cpps và một thư m c headers Thư m c cpps sẽ chứa toàn bộ tệp cpp, thư m c headers sẽ chứa toàn bộ tệp h Tệp Main.cpp chứa hàm main sẽ đư c đặt trong thư m c src Nghĩa là ta sẽ c c u tr c tương tự như sau: cpps headers Main.cpp Biên dịch một dự án Để biên dịch một... #include Tiếp đến là tên tập tin tiêu đề (chứa c c thư viện) Thư viện iostream đư c đặt trong dấu Nó chứa c c hàm xuất nhập c bản Hàm này là một phần c a namespace std [3.] Trong C+ +, c c thành phần c a thư viện chuẩn đư c khai báo trong namespace Ở đây là namespace std Để c thể truy xuất đến c c thành phần c a nó, chúng ta mô tả nó bằng từ khóa using Trong thư viện chuẩn c a C+ +, đối tượng cout... sẽ là C: \MinGW\bin Sau đó nhấp Ok Vậy là c ng vi c cấu hình đã hoàn tất Xây dựng dự án đầu tiên trên Eclipse C ng giống như CodeBlocks, Eclipse c ng tổ ch c chương trình theo dự án Để tạo mới một dự án trong Eclipse, chúng ta c ba c ch: - Vào File > New > C+ + Project - Kích chuột phải vào c a sổ Project Explorer > chọn New > C+ + Project Tiếp đến, hộp thoại sau đây sẽ xuất hiện T r a n g | 12 C+ + - ... THIỆU C u tr c giáo trình Giáo trình chia làm chương chương chia làm m c kh c C c chương xếp theo trình tự từ lập trình hướng thủ t c C++ đến lập trình hướng đối tượng lớp thư viện Đ c giả truy c p... Trong giáo trình này, giới thiệu đến c c bạn hai c ng c biên dịch C+ + GCC MinGW – miễn phí Visual C+ + - thương mại Trang |7 C+ + Một vài ý tương thích C C++ Trình biên dịch C c ví dụ giáo trình. .. signed: -1 28 -> 127 unsigned: -> 255 signed: -2 15 -> 21 5-1 unsigned: -> 21 6-1 signed: -2 31 -> 23 1-1 unsigned: -> 23 2-1 signed: -2 31 -> 23 1-1 unsigned: -> 23 2-1 signed: -2 63 -> 26 3-1 unsigned: -> 26 4-1