1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo lập trình hướng đối tượng

32 438 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 599,97 KB

Nội dung

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ố.. 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ư

Trang 1

2009

BÁO CÁO LẬP TRÌNH

HƯỚNG ĐỐI TƯỢNG

Nhóm 11 – Đề tài 6

Trang 2

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 Template trong C++

II Stander Template Library

III Lớp String chuẩn và các hàm thành viên

Trong quá trình thực hiện đề án, chúng em có nhiều điều

sơ xuất, kính mong thầy thứ lỗi cho chúng em về nhưng sơ xuất trên và góp ý cho chúng em để chúng em hoàn thiện hơn đề án của mình

Thay mặt nhóm, một lần nữa chúng em xin cảm ơn sự dạy dỗ ân cần của thầy!

Nhóm 11 Chu Đức Công

Lê Văn Hoàn Nguyễn Văn Vương

Trang 3

Mục lục:

Mục lục 3

I Template trong C++ 4

1 Định nghĩa 4

a Đặt vấn đề 4

b Định nghĩa 4

2 Function template 5

3 Class template 6

4 Tổng kết về template 7

II Stander template library 7

1 Định nghĩa STL 7

2 Thư viện chuẩn các mảng chứa 8

3 Thư viện chuẩn tổng quát 9

4 Thư viện chuẩn các dãy ký tự 9

5 Thư viện chuẩn stream và in/output 10

6 Thư viện chuẩn các số 11

7 Thư viện chuẩn hỗ trợ ngôn ngữ lập trình 11

8 Các thành phần chính của STL 12

III Lớp string chuẩn và các hàm thành viên 13

A Khái niệm 13

B Các hàm thành viên trong thư viện string 14

C Các phương thức, phép toán, tiện ích của thư viện string 21

a Các phép toán và phương thức cơ bản 21

b Chèn, xóa, lấy chuỗi con 24

c So sánh 26

d Tìm kiếm và thay thế 27

e Tách xâu 29

f Chuyển đổi hàng loạt với transform() 31

g Một số phương thức khác 32

Tài liệu tham khảo 32

Trang 4

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 function không được biên dịch (complie) cho đến khi có một thể hiện (instantiation) của nó được đòi hỏi (sử dụng) Ngay lúc

đó complier tạo ra một hàm cụ thể cho kiểu dữ liệu cụ thể việc chuyên môn hoá mẫu cho phép ta tạo ra những bản thực thi đặc

Trang 5

biệt khi làm việc với một loại dữ liệu xác định nào đó.nó cho phép ta lựa chọn dữ liệu có tính chọn lọc

Nếu một chương trình biên dịch C++ vẫn chưa tương thích với chuẩn template của ANSI-C++ thì sẽ không thể sử dụng được template

VD về template:

template <class myType>

myType GetMax (myType a, myType b)

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);

Trang 6

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++

Có thể hiểu tóm tắt như sau: Lúc đầu hàm mẫu nhận kiểu dữ liệu tổng quát là myType, khi có tham số nạp vào thì kiểu dữ liệu của hàm mẫu từ kiểu myType thành kiểu của tham số Kiể dữ liệu trả về cũng là kiểu dữ liệu mà tham số mang vào hàm mẫu Trong một Function template, có thể chấp nhận nhiều tham số với nhiều kiểu dữ liệu khác nhau Điều này cũng có nghĩa là 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

Trang 7

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:

template <class myType>

Dưới đây là một số mẫu lớp thường được dùng:

template <class T>; //Kiểu phổ biến với một tham số kiểu

template <class T, class U>; //Hai tham số kiểu.

template <class T, int N> //Một tham số kiểu, một tham số giá trị

template <class T = char> //Với một giá trị ngầm định.

template <int TFunc (int)> // Hàm là một tham số cho template.

Trong C++, Thư viện chuẩn hay Thư viện tiêu chuẩn là một

tập hợp của các lớp và các hàm được viết trong phần ngôn ngữ cốt lõi Thư viện chuẩn này cung cấp nhiều thùng chứa tổng quát, các hàm để làm tiện ích và điều chỉnh cho các thùng

Trang 8

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ự 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ợ

list: Định nghĩa lớp tiêu bản list (danh sách) và nhiều tiêu bản hỗ trợ

map: Định nghĩa lớp tiêu bản map và <multimap> và nhiều tiêu bản hỗ trợ

queue: Định nghĩa các lớp tiêu bản priority_queue và queue cùng với nhiều tiêu bản hỗ trợ

set: Định nghĩa lớp tiêu bản set và nhiều tiêu bản hỗ trợ

stack: Định nghĩa lớp tiêu bản stack (chồng) và các tiêu bản hỗ trợ

Trang 9

vector: Định nghĩa lớp tiêu bản vector và nhiều tiêu bản hỗ trợ

3 Thư viện chuẩn tổng quát

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ợ

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í

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 hành xử như chúng là một

4 Thư viện chuẩn các dãy ký tự

string: Định nghĩa thùng chứa lớp tiêu bản basic_string và nhiều hỗ trợ cho các tiêu bản

5 Thư viện chuẩn Streams và input/output

Trang 10

fstream: Định nghĩa các lớp hỗ trợ các phép toán cho dòng xuất nhập (iostream) trên các chuỗi chứa trong các tập tin bên ngoài

ios: Định nghĩa nhiều kiểu và hàm cơ bản cho các xử lý của các dòng xuất nhập Tiêu đề này thưòng bao gồm nhiều tiêu đề dòng xuất nhập khác mà ít khi được khai báo qua lệnh #include trực tiếp

iostream: Định nghĩa các đối tượng để đọc và viết ra các dòng tiêu chuẩn (standard stream) Đây thường là tiêu đề duy nhất cần phải bao gồm để tiến hành xuất và nhập (dữ liệu) từ 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

Trang 11

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> dùng để định nghĩa lớp tiêu bản basic_streambuf Lớp này là cơ sở cho phép toán của các lớp của dòng xuất nhập Tiều đề này thường được bao gồm sẵn trong các tiêu bản 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

6 Thư viện chuẩn các số

complex: Định nghĩa lớp tiêu bản complex và hỗ trợ nhiều 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:

Trang 12

A Container: Các cấu trúc dữ liệu template

B Interator: Giống con trỏ, dùng để truy cập các phần

tử dữ liệu của các container

C 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:

D 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)

 first-class container

 vector, deque, list

E Associative container – container liên kết:

 Các cấu trúc phi tuyến, có thể tìm phần tử nhanh chóng

 first-class container

 các cặp khóa/giá trị

 set, multiset, map, multimap

F 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

o erase, clear

Trang 13

III Lớp string chuẩn và các hàm thành

viên

A Khái niệm

Trong C, việc sử dụng con trỏ để lưu xâu kí tự là rất phức tạp, dễ gây lỗi khiến nhiều người cho rằng nó làm việc không bằng xâu kí tự trong Pascal Trong C++, các hàm thư viện khai báo trong thư viện string.h cũng cho phép chúng ta sử dụng cách thức cũ của C nhưng có nhiều bất tiện khi sử dụng theo cách này:

 Chúng ta phải chủ động kiểm soát bộ nhớ cấp phát chi chuỗi

kí tự Nói chung, chúng ta phải rất am hiểu về kĩ thuật cấp phát bộ nhớ và sử dụng con trỏ thì mới có thể sử dụng được cách này mà tránh được các lỗi kĩ thuật

 Chúng ta không thể thực hiện được các phép toán gán giá trị hoặc các phép toán như phép cộng chuỗi, các phép so sánh hơn (>), kém (<)

 Nếu dùng kĩ thuật cấp phát động thì phải quản lí việc cấp phát bộ nhớ khi xâu mở rộng hoặc hủy bộ nhớ khi xâu kết thúc

để tránh việc cạn bộ nhớ khi có nhiều chương trình cùng chạy Thư viện chuẩn STL trong C++ cung cấp cho chúng ta một kiểu string giúp chúng ta tránh hoàn toàn các phiển phức ở trên Các khai báo cần có để sử dụng string

Trang 14

Ý nghĩa: copy n kí tự từ đối tượng của nó, bắt đầu từ vị trí pos tới chuỗi char*ptr

Chức năng: hàm copy cho phép copy một đối tượng string sang một chuỗi char*

Có nhiều cách dùng phương thức này:

str.insert (int pos,char*s):chèn s (mảng kí tự kết thúc

„/0‟) vào vị trí pos của str;

str.insert (int pos, string s):chèn chuỗi s (kiểu string) vào vị trí pos của str;

str.insert (int pos, int n, int ch): chèn n lần kí tự ch vào vị trí pos của str;

Trang 15

vị trí pos và thay thế chúng bằng chuỗi char*ptr

 Hàm find():

Cú pháp: find (ptr,pos)

Trang 16

Ý nghĩa: tìm kiếm một mẫu, tạo ra từ chuỗi char*ptr, trong đối tượng của nó, bắt đầu từ vị trí pos và trả về vị trí của

kí tự đầu tiên tìm được

Chức năng: tìm kiếm xem một kí tự hay một chuỗi nào đó có xuất hiện trong một chuỗi str cho trước hay không

Có nhiều cách dùng phương thức này như là:

str.find (int ch, int pos = 0): tìm kí tự ch kể từ vị trí pos đến cuối chuỗi str

str.find (char*s, pos = 0):tìm s (mảng kí tự kết thúc „/0‟)

kể từ vị trí pos đến cuối chuỗi

str.find (string& s, pos = 0): tìm chuỗi s kể từ vị trí pos đến cuối chuỗi

Lưu ý: Nếu không quy định giá trị pos thì hiểu mặc nhiên là

0, nếu tìm thấy thì phương thức trả về vị trí xuất hiện đầu tiên, ngược lại trả về giá trị -1

cout << "Match found at " << i << endl;

cout << "Remaining string is:\n" ;

Ngày đăng: 19/01/2015, 08:51

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w