Báo cáo tốt nghiệp BÁO CÁO LẬP TRÌNH - Pdf 47

TRƯỜNG ĐẠI HỌC CHU VĂN AN

BÁO CÁO LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
Nhóm 11 – Đề tài 6

2009

Năm học 2009 - 2010


2009

BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
LỜI NÓI ĐẦU

Trước tiên, chúng em xin gửi lời cảm ơn chân thành nhất
tới thầy Ngô Công Thắng – giảng viên đã trực tiếp giảng dạy,
chỉ bảo chúng em trong quá trình học tập, đặc biệt là trong
khi làm đồ án này.
Xin chân thành cảm ơn tới tất cả các sinh viên, học viên
đang học tập và thực hiện đồ án cùng chúng mình đã chia sẻ tài
liệu và góp ý giúp chúng mình hoàn thiện đề án này.
Khi thực hiện đề án, chúng mình có tham khảo và sử dụng
bài viết của nhiều thành viên trên các diễn đàn và bài giảng
của nhiều thày, cô giáo. Chúng em xin phép được sử dụng những
bài viết, bài giảng trên như là một phần của bài thuyết trình
mà chúng em viết. Xin chân thành cảm ơn sự đóng góp của cộng
đồng C việt, của các thành viên trên các diễn đàn.
Đồ án của chúng em được chia thành các phần như sau:
I.


2009

Template trong C++.

1. Định nghĩa.
a. Đặt vấn đề.
Khi viết chương trình, chúng ta luôn muốn tạo ra một tập
hợp các đối tượng. Các đối tượng này có thể cùng loại hoặc
khác loại.
VD: Mảng, danh sách, hàng đợi, ngăn xếp,... đều là tập hợp
các đối tượng được xây dựng theo kiểu lớp chứa. Tức là lớp
được dùng để xây dựng tập hợp các đối tượng.
Với các kiến thức thông thường, chúng ta hoàn toàn có thể
xây dựng những lớp chứa như vậy. Nhưng với mỗi kiểu phần tử,
chúng ta lại phải chỉnh sửa chương trình nguồn. Cách làm thế
này là không thuận tiện.
C++ cho phép chúng ta định nghĩa ra một lớp “tổng quát”,
kiểu của phẩn tử trở thành tham số. Khi cần sử dụng, chúng ta
chỉ cần cung cấp kiểu cụ thể của tham số là có thể tạo ra lớp
mới.
b. Định nghĩa:
Template là một tính năng chỉ có trong C++, nó được giới
thiệu bởi tổ chức đo lường chuẩn của Mỹ (ANSI). Template rất
mạnh nhưng cũng rất phức tạp. Template được cha đẻ của C++
(Bjarne Stroustrup) sáng tạo với mong muốn tạo ra sự chung
nhất giữa các ngôn ngữ lập trình hướng đối tượng chứ không
phải dành riêng cho C++.
Template không phải là các hàm, lớp thông thường, chúng
được complie dựa theo yêu cầu, có nghĩa là code của template

thể chấp nhận bất kì kiểu dữ liệu nào làm tham số và trả về
giá trị với kiểu dữ liệu của tham số mà không phải thực hiện
xây dựng nhiều hàm bằng cách định nghĩa chồng hàm với tất cả
các kiểu dữ liệu có thể xuất hiện.
Khai báo Function template có thể sử dụng một trong hai
cách sau:
template <class identifier> function_declaration;
template <typename identifier> function_declaration;
Sự khác biệt duy nhất giữa hai kiểu khai báo mẫu này là
việc sử dụng từ khoá class hay typename, sự khác nhau giữa
chúng là không rõ ràng vì cả hai đều có cùng một ý nghĩa và
đều trả về một kết quả như nhau.
Hàm mẫu được gọi thông qua lời gọi hàm, nội dung của hàm
mẫu cũng giống như các hàm bình thường, chỉ khác một điều là
kiểu dữ liệu được hàm mẫu trả về là kiểu dữ liệu của đối số
nạp vào hàm mẫu. Chúng ta có cấu trúc gọi sau:
function_name <type> (parameters);
Tức là chúng ta gọi tên hàm, định kiểu dữ liệu của tham số
và gọi tham số truyền vào hàm giống như các hàm bình thường,
sẵn có của C++.
VD:
Nhóm 11 – Đề tài số 6

Trang 4


BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

2009


chúng ta cần cân nhắc cẩn thận kiểu dữ liệu trả về của hàm
mẫu.
3. Class template.
Class templates là các mẫu lớp giúp chúng ta có thể tạo ra
các lớp mà không cần định nghĩa cho kiểu dữ liệu của lớp tại
thời điểm khai báo lớp. Chúng ta cũng có thể sử dụng class
templates để xây dựng các lớp giống nhau về bản chất xử lý
nhưng khác nhau về kiểu dữ liệu. Chúng ta có thể khai báo mẫu
lớp như sau:

Nhóm 11 – Đề tài số 6

Trang 5


BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

2009

template <class myType>
class C
{
//Khai báo các thành phần của lớp C...
}

Khi cần sử dụng mẫu lớp này ta chỉ việc gọi tên mẫu lớp với
kiểu dữ liệu cần dùng.
VD: C <int> i(a,b);
Dưới đây là một số mẫu lớp thường được dùng:
template

dữ liệu (bao gồm I/O tương tác và tập tin), hỗ trợ một số tính
năng ngôn ngữ, và nhiều hàm thông dụng cho các thao tác như là
tìm căn bậc hai. Chuẩn C++ cũng bao gồm cả Thư viện chuẩn C.
Nhiều chức năng của thư viện chuẩn C++ là các khai báo trong
không gian tên std.
Tác giả đầu tiên của STL là Alexander Stepanov, mục đích
của ông là xây dựng một cách thể hiện tư tưởng lập trình tổng
quát. Các khái niệm trong STL được phát triển độc lập với C++.
Do đó, ban đầu, STL không phải là một thư viện C++, mà nó đã
được chuyển đổi thành thư viện C++. Nhiều tư tưởng dẫn đến sự
Nhóm 11 – Đề tài số 6

Trang 6


2009

BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

phát triển của STL đã được cài đặt phần nào trong Scheme, Ada,
và C.
Thư viện chuẩn trong C++ gồm 32 thư viện. Trong đó, ngoại
trừ thư viện String ra thì tất cả các thư viện còn lại là thư
viện mẫu chuẩn. Sau đây là các thư viện chuẩn và miêu tả chung
của chúng:
2. Thư viện chuẩn các mảng chứa.
bitset: Định nghĩa lớp tiêu bản bitset và các hàm hỗ trợ
cho việc hiển thị và điều chỉnh các dãy bit có độ dài cố định.
deque: Định nghĩa lớp tiêu bản deque (hàng) và nhiều tiêu
bản hỗ trợ.

algorithm: Định nghĩa nhiều hàm thực thi các thuật toán
về thùng chứa trong Thư viện tiêu bản chuẩn STL.
functional: Định nghĩa các hàm nhằm giúp cho việc xây
dựng các đối tượng hàm trong Thư viện tiêu bản chuẩn (còn có
tên là hàm tử).
iterator: Định nghĩa các biến lặp cơ bản, định nghĩa sẳn
các biến lặp, biến lặp dòng, cũng như là các tiêu bản hỗ trợ.
Nhóm 11 – Đề tài số 6

Trang 7


2009

BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

locale: Định nghĩa các lớp tiêu bản và các hàm mà chưong
trình C++ có thể dùng để tạo đặc tính đóng và điều chỉnh các
yếu tố định dạng và biểu thị của các số, tiền tệ, dữ liệu về
ngày tháng bao gồm hỗ trợ ngôn ngữ quốc tế cho sự phân lớp kí
tự và sự sắp xếp dãy kí tự.
memory: Định nghĩa một lớp, một toán tử và nhiều tiêu bản
nhằm giúp cấp phát và trả về (vùng nhớ) của các đối tượng.
stdexcept: Định nghĩa nhiều lớp chuẩn dùng cho việc báo
cáo các ngoại lệ. Các lớp tạo nên một hệ phân nhánh mà tất cả
đều dẫn xuất từ lớp exception và bao gồm hai kiểu ngoại lệ
thông dụng: lỗi lô-gíc và lỗi trong thời gian thi hành.
utility: Định nghĩa các kiểu, hàm, và toán tử trong Thư
viện tiêu bản chuẩn STL nhằm giúp cho việc xây dựng và quản lý
các cặp đối tưọng. Nó hữu dụng, khi hai đối tượng cần được


iosfwd: Khai báo trước các tham chiếu cho nhiều tiêu bản
để dùng suốt quá trình xuất nhập dòng. Tấr cả các tiêu bản như
vậy được định nghĩa trong các tập tin tiêu đề chuẩn khác. Chỉ
xử dụng tập tin tiêu đề này khi cần có một trong số các khai
báo của nó, nhưng không phải là định nghĩa của nó.
iomanip: Định nghĩa nhiều phép điều chỉnh mà nó lấy vào
một đối số.
istream: Định nghĩa lớp tiêu bản basic_istream, tiêu bản
này làm trung gian cho các sự chèn vào và lấy ra (dữ liệu).
Tiêu đề cũng định nghĩa một bộ điều chỉnh. Tập tin tiêu đề này
thường được sử dụng bởi các tiêu đề về dòng xuất nhập khác, nó
hiếm khi được bao gồm trực tiếp trong mã nguồn của người lập
trình.
ostream: Định nghĩa lớp tiêu bản basic_ostream, tiêu bản
này làm trung gian cho các sự chèn (dữ liệu) vào cho các dòng
xuất nhập. Tiêu đề cũng định nghĩa một bộ điều chỉnh. Tập tin
tiêu đề này thường được sử dụng bởi các tiêu đề về dòng xuất
nhập khác, nó hiếm khi được bao gồm trực tiếp trong mã nguồn
của người lập trình.
sstream: Định nghĩa nhiều lớp tiêu bản mà nó hổ trợ các
phép toán của dòng xuất nhập trên các chuỗi (dữ liệu) chứa
trong một đối tượng mảng đã dược cấp phát vùng nhớ. Những
chuỗi này rất dể chuyển đổi để tạo thành các đối tượng của lớp
tiêu bản basic_string.
streambuf: Bao gồm tiêu đề chuẩn cho các dòng xuất nhập
của

<streambuf>


tiêu bản.
numeric: Định nghĩa các hàm tiêu bản thùng chứa nhằm tiến
hành các thuật toán cung cấp cho việc xử lí số.
valarray: Định nghĩa lớp tiêu bản valarray hỗ trợ các lớp
tiêu bản và các hàm.
7. Thư viện chuẩn hỗ trợ ngôn ngữ lập trình.
exception: Định nghĩa nhiều kiểu và hàm liên hệ tới việc
xử lý các ngoại lệ. Việc xử lí ngoại lệ được dùng trong tình
huống mà máy tính có thể phục hồi từ các lỗi. Nó cung ứng ý
nghĩa cho việc trả về quyền điều khiển cho chương trình.
limits: Định nghĩa các lớp tiêu bản numeric_limits và lo
về việc biểu thị thứ tự của các điểm động và việc làm tròn.
new: Định nghĩa nhiều kiểu và hàm mà nó điều khiển việc
cấp phát cũng như trả về (bộ nhớ) của kho dự trữ dưới sự kiểm
soát của chương trình. Nó cũng định nghĩa các thành phần cho
việc báo cáo về quản lý của kho dự trữ.
typeinfo: Hỗ trợ cho nhận dạng kiểu động.
8. Các thành phần chính của STL gồm:
 Container: Các cấu trúc dữ liệu template.
 Interator: Giống con trỏ, dùng để truy cập các phần tử
dữ liệu của các container.
 Algorithm: Các thuật toán để thao tác dữ liệu, tìm
kiếm, sắp xếp,...
Trong Container của STL lại gồm có 3 loại như sau:
 Sequence container – container chuỗi:


Các cấu trúc dữ liệu tuyến tính (vector, danh sách
liên kết).




set, multiset, map, multimap

 Container

adapter



các

bộ

tương

thích

container

stack, queue, priority_queue.
Các hàm thành viên mọi container đều có:
o Default constructor, copy constructor, destructor
o empty
o max_size, size
o = < <= > >= == !=
o swap
Các hàm thành viên của first-class container:
o begin, end
o rbegin, rend

hơn (>), kém (
hạn:

string

s=”ABCDEF”;

hay

Trang 12


BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

2009

s1=s2; mà không cần copy xâu. Những constructor thường sử dụng
nhất:
string();
string(const char *str);
string(const string & str);

Có thể dùng toán tử > với cin để nhập một chuỗi ký tự đến
khi gặp một khoảng trống thì dừng.

Nhóm 11 – Đề tài số 6

Trang 13



Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status