Bài giảng Lập trình hướng đối tượng và C++ - Đại học Hàng Hải
Mục lục
Chương 1: Lập trình hướng đối tượng và ngôn ngữ C++
Chương 2: Những khái niệm mở đầu
Chương 3: Con trỏ, tham chiếu và hàm
Chương 4: Các dòng vào ra trong C++
Chương 5: Đối tượng và lớp
Chương 6: Kế thừa
Chương 7: Ràng buộc động và đa thể
Chương 8: Bản mẫu
[i], n-k); } Khi môṭ thể nghiêṃ của hàm sort đươc̣ taọ ra với môṭ kiểu dữ liêụ cu ̣thể T , các thể nghiêṃ của các hàm swap và min_element cũng tư ̣đôṇg đươc̣ sinh ra với cùng kiểu. Tổng kết: các bản mẫu hàm template return_type f(parameters) {...} trong đó T1 và T2, ... là các tham số và được sử dụng như các kiểu bình thường khác trong thân hàm . Tất cả các tham số kiểu phải xuất hiêṇ trong đăc̣ tả trong danh sách tham số. Các thể nghiệm của bản mâũ hàm đươc̣ goị tới môṭ cách tư ̣đôṇg khi có câu lêṇh: f(các tham số thực sự); trình biên dịch sẽ khớp các tham số thực sự với các tham số hình thức và xác định kiểu nào se ̃thay thế cho T. Chúng ta có thể chỉ định tường minh kiểu của T: f(các tham số thực sự); Môṭ thể nghiêṃ đăc̣ biêṭ đối với môṭ kiểu cu ̣thể V có thể đươc̣ taọ ra . Thân hàm se ̃ đươc̣ viết laị và T se ̃đươc̣ thay thế bằng V. Cũng giống như các bản mẫu lớ p chúng ta có thể taọ ra môṭ thể nghiêṃ đăc̣ biêṭ của bản mẫu hàm với một kiểu đặc biệt nào đó . Hàm min_element se ̃không làm viêc̣ chẳng hạn trong trường hợp chúng ta có một mảng các xâu , khi đó chúng ta cần có môṭ phiên bản đăc̣ biêṭ của hàm này để làm viêc̣ với các mảng mà các phần tử mảng có kiêu char *: char * & min_element(char * f[], int n){ int m = 0; for(int i=1;i<m;i++) if(strcmp(f[i],f[m])<0) 157 m = i; return f[m]; } Mọi vị trí của T bâ y giờ đươc̣ thay bằng char *. Khi găp̣ môṭ lời goị tới thể nghiêṃ hàm có kiểu là char * thay vì sinh ra môṭ thể nghiêṃ từ bản mâũ trình biên dic̣h se ̃trưc̣ tiếp biên dic̣h đoaṇ ma ̃đươc̣ viết riêng để làm viêc̣ với kiểu này. Tất nhiên cũng giống như các bản mâũ lớp chúng ta có thể sử duṇg nhiều tham số bản mẫu với bản mẫu hàm , đồng thời có thể dùng của các tham số bản mâũ kiểu và tham số bản mâũ giá tri.̣ 2.2 Các hàm chuẩn chung – thƣ viêṇ thuâṭ toán Cũng như các lớp bản mẫu có rất nhiều hàm bản mẫu trong đặc tả chuẩn của ngôn ngữ C++. Chúng có khả năng thực hiện một số các thao tác khác nhau trên các lớp chứa và các data collection khác . Chẳng haṇ chúng ta có thể thưc̣ hiêṇ tìm kiếm , sắp xếp và thưc̣ hiêṇ các thay đổi dữ liêụ khác . Các bản mẫu hàm này được định nghĩa trong file header algorithm. Tất cả các hàm bản mâũ này đều sử duṇg các iterator để quản lý dữ liêụ . Thư viêṇ STL là thư viêṇ bản mâũ chuẩn đang đươc̣ sử duṇg rôṇg raĩ nhất hiêṇ nay . 3. Bài tập Bài tập 1: Hãy xây dựng cấu trúc dữ liệu bản mẫu hàng đợi (Queue) theo hai cách: cài đăṭ bằng con trỏ và cài đăṭ bằng mảng . Bài tập 2: Xây dưṇg lớp bản mâũ DataSet chứa môṭ mảng n đối tươṇg thuôc̣ lớp bản mâũ với các phương thức: + khởi taọ: nhâp̣ môṭ mảng n phần tử kiểu bản mâũ + show: hiển thi ̣ đúng pNo phần tử của mảng. + next: hiển thi ̣ pNo phần tử tiếp theo bắt đầu từ vị trí hiện tại và tiến lên pNo vi ̣ trí. + prev: hiển thi ̣ pNo phần tử đứng trước vi ̣ trí hiêṇ taị và lùi laị pNo vi ̣ trí + begin: trở về vi ̣ trí đầu tiên và hiển thi ̣ pNo phần tử từ vi ̣ trí đầu tiên. + end: hiển thi ̣ trang cuối cùng của mảng + showAll: hiển thi ̣ tất cả các phần tử của mảng + sort: sắp xếp mảng tăng dần + clear: xóa toàn bộ mảng + các hàm cấu tử và hủy tử nếu cần thiết . Viết hàm main() minh hoạ các hàm của lớp bản mâũ đa ̃cài đăṭ với kiểu dữ liêụ số nguyên, xâu (String). 158 TÀI LIỆU THAM KHẢO [1] Phạm Văn Ất, “C++ và Lập trình hướng đối tượng”, NXB Giao thông vận tải, 2003. [2] Bruce Eckel, “Thinking in C++, Volume 1”, MindView, Inc, 2003. [3] Bruce Eckel, “Thinking in C++, Volume 2”, MindView, Inc, 2003. [4] Website www.codeproject.com. [5] Website www.codeguru.com. 159 ĐỀ THI THAM KHẢO Đề 1: Câu 1: a) Xây dựng lớp các hình chữ nhật với các thuộc tính dữ liệu là tọa độ của 2 đỉnh trên bên trái và dưới bên phải của nó (như hình vẽ): Với các phương thức sau: cấu tử mặc định, cấu tử có 4 tham số, hủy tử, các hàm toán tử nhập xuất, hàm tính diện tích, hàm tính chu vi của hình chữ nhật, hàm kiểm tra xem một điểm có nằm trong hình chữ nhật không. b) Sử dụng lớp xây dựng ở phần a viết đoạn chương trình nhập vào n hình chữ nhật (n được nhập từ bàn phím) sau đó in ra tọa độ, chu vi diện tích của chúng theo thứ tự tăng dần của diện tích. Câu 2: a) Hãy khai báo các hàm thực hiện các công việc sau : + Đổi chỗ hai số thực + Tính khoảng cách của 2 điểm trên măṭ phẳng toạ đô ̣ + Tính giai thừa của một số nguyên b) Hãy cho biết thế nào là kế thừa ? Kế thừa dùng để làm gì? Kích thước của các đối tươṇg thuôc̣ các lớp sau bằng bao nhiêu byte? class B{ protected: int x, y; char c; public: float *t; int getX(); }; class C: private B{ private: int z; public: char * func1(int); (x1, y1) (x2, y2) 160 }; Đề 2: Câu 1: a) Xây dưṇg lớp các hình tam giác có các thuôc̣ tính dữ liêụ là đô ̣dài 3 cạnh của tam giác với các phương thức sau : cấu tử măc̣ điṇh, cấu tử có tham số (3 tham số cho 3 cạnh của tam giác ), hủy tử , các hàm toán tử nhập xuất , hàm tính diện tích và chu vi tam giác. b) Sử duṇg lớp xây dưṇg ở phần a viết đoaṇ chương trình nhâp̣ vào n tam giác (n<20 và được nhập từ bàn phím) sau đó in ra đô ̣dài các caṇh, chu vi và diêṇ tích của n tam giác đó ra màn hình. Câu 2: a) Hãy khai báo các lớp sau: + Lớp CDDisc có các thuôc̣ tính : tên điã, giá tiền, tên công ty phát hành , năm sản xuất và các phương thức: cấu tử (ít nhất 2 cấu tử), hủy tử, các hàm nhập xuất. + Lớp các hình chữ nhâṭ có 2 thuôc̣ tính là chiều rôṇg và chiều dài và các phương thức: cấu tử măc̣ điṇh , cấu tử có 2 tham số, các hàm xuất nhập , hàm tính chu vi , diêṇ tích của hình chữ nhật. b) Thế nào là các hàm toán tử của môṭ lớp ? Thường có các loaị hàm toán tử nào ? Cho ví du ̣cu ̣thể về môṭ hàm toán tử so sánh bằng? Đề 3: Câu 1: a) Cài đặt lớp các hình tròn gồm các thuộc tính sau : tọa độ (bao gồm hoành đô ̣và tung đô )̣ của tâm đường tròn , bán kính đường tròn với các phương thức sau : cấu tử măc̣ điṇh , cấu tử có tham số đầy đủ (3 tham số cho ba thuôc̣ tính tương ứng ), các hàm toán tử nhập xuất, hàm tính diện tích và chu vi đường tròn, hàm kiểm tra xem hai đường tròn có cắt nhau không. b) Sử duṇg lớp đa ̃xây dưṇg ở câu a haỹ viết chương trình nhâp̣ vào n đường tròn (n < 20 và được nhập vào từ bàn phím) sau đó in ra toạ đô ,̣ bán kính, chu vi của các n đường tròn đó ra màn hình. a b c (x,y) r 161 Câu 2: a) Thế nào là hàm toán tử gán ? Thế nào là hàm cấu tử copy ? Đối với một lớp khi nào thì cần cài đặt hàm cấu tử copy và hàm toán tử gán ? So sánh sư ̣giống và khác nhau giữa hai hàm này? b) Cho lớp C1 được khai báo như sau: class C1 { int m; char * str; public: } Hãy khai báo thêm các phương thức sau cho lớp C1: cấu tử mặc định, cấu tử có 2 tham số, hủy tử, hàm xuất nhập, các hàm toán tử logic (so sánh >, <, ==, !=), hàm cấu tử copy, hàm toán tử gán. Hãy cài đặt hàm toán tử gán cho lớp C1. Đề 4: Câu 1: a) Xây dưṇg lớp các hình tam giác có các thuôc̣ tính dữ liêụ là toạ đô ̣3 đỉnh của tam giác với các phương thức sau : cấu tử măc̣ điṇh , cấu tử có tham số (6 tham số cho các tọa độ 3 đỉnh của tam giác), hủy tử, các hàm toán tử nhập xuất , hàm tính chu vi tam giác. b) Cài đặt thêm các hàm kiểm tra xem một đối tượng thuộc lớp tam giác ở câu a là tam giác gì trong số các loaị tam giác sau : tam giác đều , tam giác cân hay tam giác thường. Nhâp̣ vào n tam giác (n<20 và được nhập từ bàn phím ) sau đó in ra tọa độ, chu vi và đăc̣ điểm (đều, cân hay thường) của n tam giác đó ra màn hình. Câu 2: a) Hãy khai báo các lớp sau: + Lớp Sach có các thuôc̣ tính : tên sách, giá tiền, tên nhà xuất bản , năm xuất bản , số trang và các phương thức: cấu tử mặc định, cấu tử copy, hủy tử, các hàm nhập xuất. + Lớp Computer có 2 thuôc̣ tính: tên hãng sản xuất , tốc độ Chip , kích thước RAM , kích thước ở cứng và các phương thức : cấu tử măc̣ điṇh , cấu tử mặc định và cấu tử có 2 tham số, các hàm xuất nhập, hàm toán tử logic so sánh bằng, hàm toán tử gán. (x1, y1) (x2, y2) (x3, y3) 162 b) Thế nào là các hàm baṇ? Chúng dùng để làm gì , cho ví du?̣ Tại sao các hàm xuất nhâp̣ laị là các hàm baṇ? Đề 5: Bài 1: a) Xây dưṇg lớp các hình tứ giác c ó các thuộc tính dữ liệu là độ dài 4 cạnh của tứ giác với các phương thức sau : cấu tử măc̣ điṇh , cấu tử có tham số (4 tham số cho 4 cạnh của tứ giác), hủy tử, các hàm toán tử nhập xuất, hàm tính chu vi tứ giác. b) Sử dụng lớp xây dựng ở phần a viết đoạn chương trình nhập vào n tứ giác (n<20 và được nhập từ bàn phím) sau đó in ra đô ̣dài các caṇh, chu vi của n tứ giác đó ra màn hình. c) Sắp xếp mảng các tứ giác đa ̃đươc̣ nhâp̣ vào theo chi ều tăng dần của chu vi và in kết quả ra màn hình. Câu 2: a) Khai báo lớp các hình tròn gồm các thuôc̣ tính sau : tọa độ (bao gồm hoành đô ̣và tung đô )̣ của tâm đường tròn , bán kính đường tròn với các phương thức sau : cấu tử măc̣ điṇh, cấu tử có tham số đầy đủ (3 tham số cho ba thuôc̣ tính tương ứng ), các hàm toán tử nhập xuất, hàm tính diện tích và chu vi đường tròn, hàm kiểm tra xem hai đường tròn có cắt nhau không. b) Thế nào là các hàm toán tử của một lớp ? Thường có các loaị hàm toán tử nào ? Cho ví du ̣cu ̣thể về môṭ hàm toán tử so sánh bằng? (x,y) r
File đính kèm:
- Bài giảng Lập trình hướng đối tượng và C++ - Đại học Hàng Hải.pdf