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

pdf169 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 3662 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Lập trình hướng đối tượng và C++ - Đại học Hàng Hải, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
[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:

  • pdfBài giảng Lập trình hướng đối tượng và C++ - Đại học Hàng Hải.pdf