Các thành phần của thư viện iostream (với thực thể char)
1) Các lớp trong iostream (có thể tham khảo thêm trong thư viện này).
Lớp ios_base
Lớp ios
Lớp istream
Lớp ostream
Lớp ifstreamChương 17. C|c lớp thư viện
C++
Lớp ofstream
Lớp fstream
Lớp istringstream
Lớp ostringstream
Lớp streambuf
Lớp filebuf
Lớp stringbuf
2) Các đối tượng
Đối tượng cin
Xem chương “Nhập xuất cơ bản”. C|c phương thức và thuộc tính khác
xem thêm ở lớp istream.
Đối tượng cout
Xem chương “Nhập xuất cơ bản”. C|c phương thức và thuộc tính của lớp
khác xem thêm ở lớp ostream.
Đối tượng cerr
Thuộc lớp ostream được sử dụng để in luồng lỗi cơ bản. Mặc định, hầu
hết hệ thống đều có một chuẩn lỗi cơ bản để in ra màn hình. Bởi vì cerr là
một đối tượng của lớp ostream, chúng ta có thể viết các kí tự theo dữ liệu
được định dạng nhờ vào toán tử chèn << hoặc không định dạng dữ liệu
nếu sử dụng hàm thành viên write.
231 trang |
Chia sẻ: hachi492 | Ngày: 08/01/2022 | Lượt xem: 518 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình môn Lập trình hướng đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
uy cập Chức năng
real private Phần thực và phần ảo.
imag
Phương thức khởi tạo: public C|c phương thức khởi
complex c; tạo: không tham số, có
complex c(real, imag); hai tham số và hàm tạo
complex c(d); sao chép.
imag() public Phương thức getImage –
trả về giá trị phần ảo.
real() public Phương thức getReal –
trả về giá trị của phần
thực.
operator= public Các hàm toán tử thành
operator+= viên: toán tử gán, toán
operator-= tử cộng hợp nhất, toán
operator*= tử trừ hợp nhất, toán tử
operator/= nhân hợp nhất, toán tử
chia hợp nhất.
_Add(complex) protected C|c phương thức cộng,
_Sub(complex) trừ, nhân và chia hai số
_Mul(complex) phức.
_Div(complex)
Trang | 194
Chương 17. C|c lớp thư viện
Các hàm toàn cục (hoặc hàm bạn)
Tên phương thức Chức năng
operator + Toán tử cộng hai số phức.
operator – Toán tử trừ hai số phức.
operator * Toán tử nhân hai số phức.
operator / Toán tử chia hai số phức.
operator = Toán tử gán số phức.
operator == Toán tử so sánh bằng.
operator != Toán tử so sánh khác.
operator >> Toán tử nhập số phức.
operator << Toán tử xuất số phức.
real(complex) Trả về phần thực của số phức.
imag(complex) Trả về phần ảo của số phức.
abs(complex) Trả về giá trị modul của số phức. Modul của số
phức được tính theo công thức √ .
norm(complex) Trả về giá trị là chuẩn của số phức. Chuẩn của số
phức l{ bình phương gi| trị của modul, tức là
.
conj(complex) Trả về số phức liên hợp. Số phức liên hợp của số
phức a nhận được bằng cách thay phần ảo của a
bằng –a.
polar(float, float) Trả về một số phức trong hệ tọa độ Decac. Hai
tham số truyền v{o tương ứng với modul và
argument của số phức.
( )
{
( )
cos(complex) Trả về giá trị cosin của số phức.
sin(complex) Trả về giá trị sin của số phức.
tan(complex) Trả về giá trị tan của số phức.
cosh(complex) Trả về giá trị cosin hyperbol của số phức.
sinh(complex) Trả về giá trị sinh hyperbol của số phức.
tanh(complex) Trả về giá trị tan hyperbol của số phức.
exp(complex) Trả về giá trị e lũy thừa của số phức.
sqrt(complex) Trả về giá trị căn bậc hai của số phức.
log(complex) Trả về giá trị logarith cơ số tự nhiên (logarith
nepe) của số phức.
log10(complex) Trả về giá trị logarith cơ số 10 của số phức.
pow(complex, ) Trả về lũy thừa của số phức. Tham số thứ hai có
thể là số phức, số thực, số nguyên.
C++
T r a n g | 195
Chương 17. C|c lớp thư viện
Đ}y l{ lớp số học khá hữu dụng trong tính toán khoa học. Chúng ta có thể
sử dụng nó mà không cần xây dựng lại lớp này. Tuy nhiên, khi bắt đầu tiếp
xúc với lập trình hướng đối tượng, cần thiết phải xây dựng nó.
2. Lớp ngăn xếp stack
Lớp stack cũng l{ một lớp template. Nó làm việc theo nguyên tắc hằng đợi –
v{o trước ra sau. Lớp stack cung cấp c|c phương thức để làm việc theo
nguyên tắc Lifo như trong học phần cấu trúc dữ liệu và giải thuật.
Khai báo một đối tượng thuộc lớp stack:
stack s;
Cần lưu ý rằng, lớp stack nằm trong thư viện stack. Sau đ}y l{ một số hàm
thành viên của lớp stack.
Tên phương thức Mức truy cập Chức năng
stackc; public Hàm tạo. Đối với hàm tạo thứ
stack hai, ta cần sử dụng c|c đối
tượng deque v{ allocator. Đ}y
cũng l{ c|c lớp template.
empty() public Phương thức hằng. Trả về
kiểu bool. Nhận giá trị true
nếu stack rỗng v{ ngược lại
stack không rỗng thì nhận giá
trị false.
size() public Phương thức hằng. Trả về
kiểu số nguyên l{ kích thước
của stack (tức số phần tử của
stack).
top() public Có hai phương thức top được
quá tải: hằng và không hằng.
Nó trả về phần tử nằm ở đỉnh
của stack (tức phần tử được
đưa v{o sau cùng).
push() public Bổ sung một phần tử mới vào
trong stack.
pop() public Lấy ra một phần tử trong
stack. Phương thức này không
trả về giá trị của phần tử vừa
được lấy ra.
C++
T r a n g | 196
Chương 17. C|c lớp thư viện
Stack trong trường hợp này không bị giới hạn kích thước (bởi nó được khai
b|o động).
3. Lớp hàng đợi queue
Queue là một lớp template. Để sử dụng queue, ta cần khai b|o thư viện
queue tương ứng. Queue làm việc theo nguyên tắc Fifo – tức v{o trước thì
ra trước. Sau đ}y l{ ví dụ về việc tạo một đối tượng queue:
queue q;
C|c phương thức thành viên của lớp queue:
Tên phương thức Mức truy cập Chức năng
queue public Hàm tạo. Đối với hàm tạo thứ
queue hai, ta cần sử dụng c|c đối
tượng deque v{ allocator. Đ}y
cũng l{ c|c lớp template.
empty() public Phương thức hằng. Trả về
kiểu bool. Nhận giá trị true
nếu queue rỗng v{ ngược lại
queue không rỗng thì nhận giá
trị false.
size() public Phương thức hằng. Trả về
kiểu số nguyên l{ kích thước
của queue (tức số phần tử của
queue).
front() public Có hai phương thức front
được quá tải: hằng và không
hằng. Nó trả về phần tử nằm ở
đầu ra (tức phần tử được đưa
vào đầu tiên).
back() public Có hai phương thức front
được quá tải: hằng và không
hằng. Nó trả về phần tử nằm ở
đầu vào (tức phần tử được
đưa v{o sau cùng).
push() public Bổ sung một phần tử mới vào
trong queue. Phần tử được
đưa v{o theo hướng back.
pop() public Lấy ra một phần tử trong
queue. Phương thức này
không trả về giá trị của phần
C++
T r a n g | 197
Chương 17. C|c lớp thư viện
tử vừa được lấy ra. Phần tử
được lấy ra theo hướng front.
Cũng tương tự như stack, queue trong trường hợp n{y cũng không bị giới
hạn kích thước (vì được kha b|o động).
3. Lớp vector
Cần lưu ý rằng, lớp vector có cấu trúc tương đối giống với mảng. Vector
không phải là một lớp đối tượng như trong hình học. Các phần tử của
vector được sắp xếp liên tục trong bộ nhớ. Chúng ta không thể rời rạc hóa
các phần tử (khi bổ sung các phần tử, cần bổ sung một cách liên tục; nếu
không sẽ bị lỗi cấp phát bộ nhớ). Chúng ta có thể truy cập đến các phần tử
của vector thông qua chỉ số hoặc iterator.
Chương trình Kết quả
#include Theo chi so:
#include 10
20
using namespace std; 22
Theo con tro iterator:
int main() 10
{ 20
vector v; 22
v.push_back(10);
v.push_back(20);
v.push_back(22);
//=====Cách 1=====
cout<<"Theo chi so:"<<endl;
for (unsigned i=0; i<v.size(); i++)
cout<<v[i]<<endl;
//=====Cách 2=====
cout<<"Theo con tro iterator:"<<endl;
vector::iterator it;
for (it=v.begin(); it<v.end();++it)
cout<<*it<<endl;
return 0;
}
Theo cách 1, chúng ta truy cập đến các phần tử của vector theo cách truy
cập như đối với mảng; cách thứ hai cho phép ta truy cập thông qua con trỏ
iterator. Sau đ}y, chúng ta sẽ tham khảo c|c phương thức thành viên của
lớp vector.
C++
T r a n g | 198
Chương 17. C|c lớp thư viện
Tên phương thức Mức truy cập Chức năng
vector public Hàm tạo.
vector
~vector() public Hàm hủy.
operator = public Toán tử gán.
begin() public Trả về iterator tương ứng với
iterator đầu tiên của vector.
end() public Trả về iterator tương ứng với
iterator cuối của vector.
rbegin() public Trả về iterator nghịch đảo của
iterator đầu tiên của vector.
rend() public Trả về iterator nghịch đảo của
iterator cuối của vector.
size() public Trả về kích thước của vector.
max_size() public Trả về kích thước cực đại của
vector.
resize(int) public Thay đổi kích thước của vector.
resize(int, ?) Nó có hai chồng chất hàm, tham
số int thứ nhất tương ứng với
kích thước mới của vector; tham
số template thứ hai tương ứng
với giá trị được bổ sung mặc
định.
capacity() public Trả về kích thước bộ nhớ đ~ cấp
phát cho các phần tử của vector.
Cần lưu ý, cơ chế cấp phát này
trong C++ là tự động và luôn
đảm bảo size()<=capacity().
empty() public Trả về giá trị true nếu vector
rỗng v{ ngược lại.
reserve(int) public Thay đổi kích thước cho vùng
bộ nhớ lưu trữ các phần tử đ~
khởi tạo của vector. Tham số
của h{m tương ứng với giá trị
trả về của phương thức
capacity.
operator[int] public Trả về phần tử tương ứng với vị
trí được chỉ định (như đối với
mảng).
at(int) public Tham chiếu đến phần tử tương
ứng với chỉ số được chỉ định.
Phương thức n{y tương tự như C++
T r a n g | 199
Chương 17. C|c lớp thư viện
toán tử [] ở trên.
front() public Trả về phần tử đầu tiên (không
phải l{ iterator như begin).
back() public Trả về phần tử cuối cùng (không
phải l{ iterator như end).
assign(iterator, iterator) public Khởi gán giá trị cho vector.
assign(int, ?)
push_back(?) public Bổ sung một phần tử vào cuối
vector.
pop_back() public Loại bỏ phần tử phía cuối của
vector.
iterator(iterator, ?) public Phương thức thứ nhất trả về
insert(iterator, ?) iterator, ba phương thức còn lại
insert(iterator, int , ?) trả về void. Vector sẽ được nới
insert(iterator, iterator, rộng bằng cách bổ sung thêm
iterator) các phần tử mới. Phương thức
đầu tiên trả về iterator cuối
cùng của vector sau khi nới rộng
kích thước của nó.
erase(iterator) public Xóa bỏ các phần tử của vector.
erase(iterator, iterator) Phương thức đầu xóa một phần
tử, phương thức hai – xóa các
phần tử trong vùng giữa hai
tham số được chỉ định. Sau khi
xóa bỏ, nó trả về iterator của
phần tử cuối.
swap(vector&) public Ho|n đổi giá trị của hai vector.
clear() public Xóa bỏ hoàn toàn các phần tử
của vector. Sau khi xóa bỏ, kích
thước của nó là 0.
get_allocator() public Trả về số lượng c|c đối tượng
được cấp phát bộ nhớ sử dụng
khi khở tạo vector.
4. Lớp string
Thư viện chuẩn string của C++ cung cấp lớp template tương ứng với string
và wstring. C|c phương thức thành viên của lớp string bao gồm:
Tên phương thức Mức truy cập Chức năng
string() public C|c phương thức khởi tạo:
string(const string&) - Khởi tạo không tham số. C++
T r a n g | 200
Chương 17. C|c lớp thư viện
string(const string&, int, int) - Sao chép hàm tạo.
string(const char*, int) - Sao chép xâu con từ vị trí
string(const char*) int thứ nhất với độ dài int
string(int, char) thứ hai.
- Sao chép các kí tự của
mảng xâu kí tự với độ dài
là tham số int (kể từ vị trí
đầu tiên).
- Tạo một xâu kí tự có nội
dung là kí tự char v{ độ dài
là tham số int.
Các iterator: begin, end, public Xem ở phần lớp vector.
rbegin, rend
size, max_size, resize, public Xem ở phần lớp vector.
capacity, reserve, clear, empty
operator[int] public Xem ở phần lớp vector.
at
length() public Trả về độ dài của xâu.
operator+= public Cộng dồn xâu.
append(const string&) public Bổ sung xâu hoặc một phần
append(const string&, int, int) của x}u v{o x}u cũ. Các
append(const char*, int) tham số n{y tương tự như
append(const char*) trong phương thức khởi
append(int, char) tạo.
push_back(char) public Bổ sung một kí tự vào xâu.
assign, erase, swap public Xem ở lớp vector.
insert(int, const string&) public Chèn xâu con vào xâu. Các
insert(int, const string&, int, phương thức sử dụng tham
int) số iterator hoàn toàn
insert(int, const char*) tương tự như trường hợp
insert(int, int, char) lớp vector. Phương thức 1
insert(iterator, char) sẽ chèn xâu con vào xâu
insert(iterator, int, char) ban đầu tại vị trí int.
insert(iterator, iterator, Phương thức hai tương tự,
iterator) nhưng x}u con chỉ lấy từ
tham số int thứ 2 với độ
dài là tham số int thứ 3.
Phương thức 3 tương tự
phương thức 1. Phương
thức 4 sẽ chèn kí tự char
vào vị trí tham số int thứ
nhất với số lần là tham số
C++
T r a n g | 201
Chương 17. C|c lớp thư viện
int thứ 2.
replace public Thay thế một phần của xâu
theo các tham số tương tự
như phương thức khởi tạo.
c_str public Chuyển sang xâu dạng C
tương ứng.
data public Trả về mảng các kí tự.
get_allocator public Xem ở lớp vector.
copy(char*, int, int=0) public Sao chép xâu.
find(const string&, int=0) public Tìm kiếm xâu con trong
find(const char*, int, int) một xâu.
find(const char*, int=0)
find(char, int=0)
find_fist_of public Tìm kiếm xâu đầu tiên,
find_last_of cuối cùng, không phải là
find_fist_not_of đầu tiên, không phải là cuối
find_last_not_of cùng.
substr(int, int) public Trả về xâu con từ vị trí int
thứ nhất với độ dài int thứ
hai.
compare public So sánh hai xâu. Nhận giá
trị 0, nếu hai xâu bằng
nhau v{ ngược lại.
Các hàm toàn cục.
Tên phương thức Chức năng
operator+ Cộng hai xâu.
swap(string&, string&) Ho|n đổi nội dung của hai xâu.
operator== Các toán tử so sánh hai xâu. Xâu s>ss nếu các kí
operator!= tự trong s đứng trước ss trong bảng chữ cái.
operator<
operator>
operator>=
operator<=
getline Nhập xâu.
operator<< Chèn xâu và chuyển hóa thành luồng stream.
operator>> Trích tách xâu từ luồng stream.
C++
T r a n g | 202
Chương 17. C|c lớp thư viện
5. Lớp list
Tên phương thức Mức truy cập Chức năng
list(allocator) public Hàm tạo.
list(int, ?, allocator)
list(list)
~list() public Hàm hủy.
begin, end, rbegin, rend public Xem ở lớp vector.
empty, size, max_size, resize public Xem ở lớp vector.
front, back, push_front, public Xem ở lớp vector.
push_back, pop_front,
pop_back, insert, erase, swap,
clear.
splice(iterator, list) public Chuyển các phần tử từ
danh sách list sang danh
sách chứa từ vị trí được chỉ
định.
remove(const T&) public Xóa các phần tử có giá trị
được chỉ định.
remove_if public Xóa phần tử và dồn danh
sách lại.
unique public Xóa các phần tử trùng lặp.
merge public Nhập hai danh sách lại.
sort public Sắp xếp danh sách.
reverse public Đảo ngược thứ tự các phần
tử trong danh sách.
get_allocator public Xem ở lớp vector.
6. Lớp map
Map là một cấu trúc dữ liệu gồm có hai phần là khóa và giá trị. Mỗi khóa là
duy nhất v{ nó tương ứng với một giá trị cụ thể. Lớp map là một lớp
template.
Tên phương thức Mức truy cập Chức năng
map public Hàm tạo.
~map() public Hàm hủy.
begin, end, rbegin, rend public Xem ở lớp vector.
empty, size, max_size, resize public Xem ở lớp vector.
insert, erase, swap, clear. public Xem ở lớp vector.
operator[] public Xem ở lớp vector.
C++
T r a n g | 203
Chương 17. C|c lớp thư viện
key_comp public Trả về key của đối tượng.
value_comp public Trả về giá trị của đối
tượng.
find public Trả về chỉ số dạng iterator
của khóa tìm kiếm.
count Đếm số đối tượng có khóa
chỉ định.
lower_bound Trả về iterator của biên
dưới.
upper_bound Trả về iterator của biên
trên.
equal_range Trả về cặp cận trên và cận
dưới.
get_allocator public Xem ở lớp vector.
7. Lớp set
Set là một dạng cấu trúc dữ liệu mà mỗi phần tử của nó là một khóa (nghĩa
là không cho phép chứa các phần tử trùng lặp). C|c phương thức của set
ho{n to{n tương tự như của map. Set cũng l{ một lớp template.
8. Các lớp thư viện nhập xuất
Thư viện các luồng nhập xuất
Thư viện iostream l{ thư viện hướng đối tượng cung cấp các chức năng
nhập xuất cơ bản sử dụng luồng stream. Một luồng là một đối tượng trừu
tượng có thể làm việc với các thiết bị xuất nhập. Một luồng về cơ bản có thể
được biểu diễn như một dãy các kí tự có độ dài vô hạn.
Các luồng được quản lý v{ lưu trữ tài nguyên vật lý dưới dạng kí tự như tập
tin, bàn phím, console, các kí tự này có thể được đọc từ hoặc ghi lên luồng.
C++
T r a n g | 204
Chương 17. C|c lớp thư viện
Ví dụ các tập tin trong C++ được tổ chức v{ tương t|c với tập tin. Một luồng
tập tin được sử dụng để mở tập tin, đọc, ghi trên tập tin.
Để làm việc với luồng, C++ cung cấp thư viện iostream chuẩn chứa c|c đối
tượng sau:
Các lớp template cơ bản
Cơ sở của thư viện iostream là cấu trúc cây phả hệ của các lớp template. Các
lớp template cung cấp hầu hết các tính năng trong thư viện của C++ để có
thể làm việc với các kiểu dữ liệu hiện đại được bổ sung sau này. Nó là một
tập hợp các lớp template, mỗi lớp có hai tham số template: kiểu char
(charT) để x|c định kiểu của các phần tử và tham số traits để cung cấp các
đặc tính bổ sung cho mỗi loại phần tử. Lớp template trong cây phả hệ lớp có
cùng tên với đối tượng thể hiện của lớp char và có tiền tố là basic_. Ví dụ lớp
template của istream là basic_istream, của fstream l{ basic_fstream, Chỉ
có duy nhất một ngoại lệ đó là ios_base là một lớp độc lập và không tồn tại
lớp tương ứng là base.
Thực thể của lớp template
Thư viện được chia thành hai tập hợp thực thể của lớp iostream: một là
theo hướng hẹp để quản lý các phần tử kiểu char và một phần tử thuộc kiểu
khác; theo hướng rộng để tổ chức các phần tử kiểu wchar_t.
Thực thể theo hướng hẹp char có thể được biết đến nhiều hơn như l{ một
thực thể của thư viện iostream. Các lớp như ios, iostream v{ ofstream l{ c|c
thực thể theo hướng rộng. Biểu đồ ở trên là biểu đồ biểu diễn tên và mối
quan hệ giữa các lớp theo hướng hẹp.
Các thực thể theo hướng rộng wchar_t có cùng tên với thực thể theo hướng
hẹp nhưng có tiền tố bổ sung là w. Ví dụ wios và ios, wistream và
wofstream.
Các đối tượng chuẩn
Là một phần của thư viện iostream, được đặc tả trong tệp tiêu đề
thường được sử dụng để thực hiện các chức năng nhập xuất
chuẩn. Chúng được chia th{nh hai nhóm: nhóm đối tượng định hướng hẹp
bao gồm ba đối tượng phổ biến nhất: cin, cout, cer v{ clog v{ nhóm định
hướng rộng bao gồm wcin, wcout, werr và wlog.
C++
T r a n g | 205
Chương 17. C|c lớp thư viện
Các kiểu dữ liệu
Các lớp iostream sử dụng các kiểu cơ bản. Chúng sử dụng kiểu dữ liệu cơ
bản phụ thuộc vào sự thể hiện của chúng. Ví dụ theo mặc định char và
wchar_t, kiểu streampos, streamoff v{ streamsize dùng để biểu diễn vị trí,
offset v{ kích thước tương ứng.
Các thao tác thực hiện
Các thao tác thực thi trên luồng là các hàm toàn cục được thiết kế để sử
dụng cùng với toán tử chèn >. Ngoài ra còn có các
chức năng định dạng như endl, hex, scientific.
Các tập tin
. , , , v{ không thường
được sử dụng một cách trực tiếp trong c|c chương trình C++. Chúng mô
tả lớp cơ sở của cây phả hệ v{ được đưa v{o trong chương trình thông
qua một tập tin tiêu đề khác của thư viện chứa các lớp dẫn xuất.
. đặc tả c|c đối tượng sử dụng để kết nối thông qua các
chuẩn nhập xuất (bao gồm cả cin, cout).
. x|c định các lớp luồng (như c|c lớp template basic_ifstream
hay lớp ofstream) cũng như c|c đối tượng bộ đệm (basic_filebuf).
Những lớp n{y được sử dụng để làm việc với tập tin bằng cách sử dụng
luồng.
. các lớp x|c định trong tập tin n{y thường sử dụng đối tượng
string nếu chúng là luồng.
. đặc tả một vài chức năng chuẩn với các tham số được sử
dụng kết hợp với các toán tử t|ch v{ chèn để chỉnh sửa các cờ hiệu và
các thông số định dạng.
Các thành phần của thư viện iostream (với thực thể char)
1) Các lớp trong iostream (có thể tham khảo thêm trong thư viện này).
Lớp ios_base
Lớp ios
Lớp istream
Lớp ostream
Lớp ifstream
C++
T r a n g | 206
Chương 17. C|c lớp thư viện
Lớp ofstream
Lớp fstream
Lớp istringstream
Lớp ostringstream
Lớp streambuf
Lớp filebuf
Lớp stringbuf
2) Các đối tượng
Đối tượng cin
Xem chương “Nhập xuất cơ bản”. C|c phương thức và thuộc tính khác
xem thêm ở lớp istream.
Đối tượng cout
Xem chương “Nhập xuất cơ bản”. C|c phương thức và thuộc tính của lớp
khác xem thêm ở lớp ostream.
Đối tượng cerr
Thuộc lớp ostream được sử dụng để in luồng lỗi cơ bản. Mặc định, hầu
hết hệ thống đều có một chuẩn lỗi cơ bản để in ra màn hình. Bởi vì cerr là
một đối tượng của lớp ostream, chúng ta có thể viết các kí tự theo dữ liệu
được định dạng nhờ vào toán tử chèn << hoặc không định dạng dữ liệu
nếu sử dụng hàm thành viên write.
#include
int main()
{
int num;
std::cin>>num;
if (std::cin.good())
{
std::cout<<"Good !";
}else
{
std::cerr<<"Error";
//Hoặc std::cerr.write("Error",
sizeof(std::streamsize));
C++
T r a n g | 207
Chương 17. C|c lớp thư viện
}
return 0;
}
Nếu số nguyên nhập v{o đúng định dạng thì sẽ thực hiện chức năng in ra
“Good”, ngược lại sẽ in ra “Error”.
Đối tượng clog
Tương tự như cerr, clog dùng để biểu diễn luồng đăng nhập chuẩn.
3) Các kiểu dữ liệu
Kiểu fpos: x|c định vị trí trong luồng. Về bản chất nó là một lớp
template. Nó có hai th{nh viên getter v{ setter tương ứng là: state() và
state(stateT).
Kiểu streamoff: x|c định vị trí của offset trong luồng. Ta hoàn toàn có
thể chuyển đổi nó thành streamsize, fpos hoặc streampos.
Kiểu streampos: tương tự với fpos.
Kiểu streamsize: biểu diễn kích thước luồng.
4) Các thao tác thực hiện
boolalpha: thường sử dụng kết hợp với toán tử nhập >> hoặc xuất <<.
Nếu tham số là boolalpha thì tham số bool l{ 1 v{ 0 tương ứng sẽ được
hiểu là true và false.
#include true
true
int main()
{
bool num;
std::cin>>std::boolalpha>>num;
std::cout<<num;
return 0;
}
dec: đọc ghi dữ liệu số theo dạng thập phân (mặc định).
#include true
true
int main()
C++
T r a n g | 208
Chương 17. C|c lớp thư viện
{
int num = 10;
std::cout<<std::dec<<num;
return 0;
}
endl: chèn dấu xuống dòng. Tương tự như “\n”.
ends: chèn kí tự trống “\0”.
fixed: áp dụng cho định dạng số thực có dấu chấm. Khi
cout.precision(int) được triệu gọi, thì số chữ số thập phân (tham số
int) sẽ được áp dụng nếu chuẩn xuất dữ liệu có sử dụng fixed (khác với
none - sẽ áp dụng theo mặc định và không phụ thuộc vào việc triệu gọi
phương thức trên).
#include 3.14 1
//Không bật
int main() fixed
{
float a = 3.141516f, b = 1.00f; 3.142 1.000
std::cout.precision(3); //Bật fixed
std::cout<<a<<"\t"<<b<<std::endl;
std::cout<<std::fixed<<a<<"\t"<<b;
return 0;
}
flush: đồng bộ hóa bộ đệm với con trỏ luồng. Điều n{y có nghĩa l{ tất cả
các kí tự chưa được ghi trong bộ đệm sẽ được ghi ra liên tục.
#include //Dữ liệu sẽ được ghi liên
using namespace std; tục lên tập tin test.txt. Dữ
liệu trong file này sẽ được
int main () { cập nhập liên tục 100 lần.
ofstream outfile
("test.txt");
for (int n=0; n<100; n++)
outfile << n << flush;
outfile.close();
return 0;
}
C++
T r a n g | 209
Chương 17. C|c lớp thư viện
hex: thiết lập cờ hiệu chuỗi thập lục phân cho số được in ra.
cout<<hex<<15; //Kết quả - F
internal: kéo giãn vùng dữ liệu về hai phía (tương tự justify trong
Microsoft Word) theo độ rộng được thiết lập bởi cout.width(int).
left: tương tự internal, nhưng dữ liệu được kéo về bên trái.
noboolalpha: ngược lại với boolalpha, chỉ in ra giá trị là 1 và 0, dù cho
giá trị đúng có được thiết lập là true, và giá trị sai được thiết lập là
false.
noshowbase: không hiển thị dạng thức của cơ số. Ví dụ cơ số 8 sẽ có
dạng 0x Nếu cờ hiệu n{y được triệu gọi, dòng dữ liệu in ra sẽ không
chứa 0x.
noshowpoint: không hiển thị dấu chấm động.
noshowpos: không hiển thị dấu của số dương.
noskipws: không bỏ qua các kí tự trắng khi tách dữ liệu (khi kết hợp sử
dụng lớp istringstream).
nounitbuf: bộ đệm sẽ không bị làm cạn sau mỗi lần thực hiện thao tác
ghi dữ liệu.
nouppercase: không hiển thị phần chữ trong các giá trị của hệ cơ số 16
dưới dạng chữ hoa (nghĩa l{ luôn viết thường a, b, c, d, e, f).
oct: thiết lập cờ hiệu cho chuỗi bát phân in ra (chuyển một số thành
chuỗi bát phân).
resetiosflags : hủy bỏ cờ hiệu tương ứng với hệ cơ số được chọn.
right: tương tự internal, nhưng dữ liệu được kéo về bên phải.
scientific: tương tự fixed, nhưng nó hiển thị số thập phân dấu chấm
động dưới dạng E.
setbase: thiết lập hệ cơ số sẽ chuyển đổi. Nó tương đương với hex –
nếu cơ số thiết lập là 16; oct – 8; dec – 10.
setfill: bổ sung các kí tự được chỉ định vào phần còn trống trong vùng
dữ liệu được chỉ định.
setiosflags: thiết lập cờ hiệu với hệ cơ số được chọn.
setprecision: thiết lập số ô trống dành cho cả phần nguyên lẫn phần
thập phân (không tính dấu chấm). Cũng hoạt động tương ứng với
fixed.
setw: thiết lập độ rộng cho vùng dữ liệu hiển thị.
showbase: hiển thị dạng thức cơ số. Cờ hiệu n{y ngược với
noshowbase. C++
T r a n g | 210
Chương 17. C|c lớp thư viện
showpoint: hiển thị dấu chấm động.
showpos: hiển thị dấu + trước số dương.
skipws: bỏ qua kí tự trắng khi tách dữ liệu.
unitbuf: bộ đệm sẽ bị làm cạn sau mỗi lần ghi dữ liệu.
uppercase: hiển thị phần chữ trong hệ cơ số 16 dưới dạng chữ hoa (A,
B, C, D, E, F).
ws: bỏ qua các kí tự trắng (hoặc các kí tự tab, enter) khi tách dữ liệu.
C++
T r a n g | 211
Phần Thực hành
HƯỚNG DẪN THỰC HÀNH
BÀI THỰC HÀNH SỐ 1
Nhập xuất cơ bản và Hàm trong C++.
Hãy thực hiện các công việc sau đ}y:
a. Xây dựng một chương trình gồm có hai phần: phần file header đặt tên là
tieude.h, phần chương trình chính l{ main.cpp.
b. Tất cả c|c h{m trong chương trình cần phải khai báo prototype. Các tiêu
đề file được đặt trong tệp tiêu đề. Chương trình chính chứa các hàm thực
hiện các công việc sau và hàm main.
- Sử dụng hàm nhập xuất cơ bản để xây dựng hàm nhập vào một xâu kí tự
dưới dạng kiểu dữ liệu string. Sau đó:
+ In ra x}u đảo ngược. Ví dụ “Toi di hoc”, thì in ra “coh id ioT”. Hàm này
gọi là hàm DaoXau.
+ In ra các kí tự đảo ngược. Ví dụ “Toi di hoc”, thì in ra “hoc di Toi”. Hàm
này gọi là hàm DaoTu.
- Nhập vào một mảng số nguyên, in ra tổng các phần tử của chúng. Hàm
này gọi là 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 nhất v{ phương trình bậc hai. Tên gọi của hai hàm này là
GiaiPhuongTrinh.
- Sử dụng khai báo hàm với tham số mặc định để giải phương trình bậc nhất
v{ phương trình bậc hai, hàm này có tên gọi là GiaiPhuongTrinhTSMD.
- Trong hàm main, hãy thực hiện các công việc sau: in ra thông báo nhập
vào một xâu kí tự và gọi hàm DaoXau và DaoTu, nhập vào một mảng số
nguyên và gọi hàm TinhTong. Sử dụng hàm xuất nhập cơ bản để đưa ra
thông báo nhập các hệ số cho phương trình. Nếu hệ số c nhập vào bằng 0,
thì thực hiện giải phương trình bậc nhất, còn c khác không thì thực hiện giải
Trang | 212
Phần Thực hành
phương trình bậc hai (giải c|c phương trình n{y bằng cách gọi các hàm xây
dựng ở trên).
BÀI THỰC HÀNH SỐ 2
Xây dựng Lớp và Làm việc với Đối Tượng
1. Xây dựng lớp HangHoa gồm có c|c phương thức và thuộc tính sau:
Tên gọi Mức truy cập Loại Giải thích
tenHang private Tên mặt hàng
ngaySanXuat private Thuộc Ngày sản xuất
donGia private tính Đơ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 trên bao gồm setter v{ getter. Phương thức TinhTien là
phương thức dùng để tính số tiền mà khách hàng mua. Tính tiền sẽ bằng
donGia*soLuong.
2. Xây dựng lớp KhachHang gồm c|c phương thức và 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
password private tính Mật khẩu 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 khẩu người dùng
thức
GetPassword public Tiếp nhận mật khẩu người dùng
MuaHang public Mua hàng
C|c phương thức setter và getter ho{n to{n tương tự như trên. Phương
thức MuaHang sẽ triệu gọi c|c phương thức thiết lập tên hàng, ngày sản
xuất, và tính tiền của đối tượng HangHoa ở trên. Phương thức mua hàng
C++
T r a n g | 213
Phần Thực hành
này, chỉ được chấp nhận khi username và password của khách hàng nhập
vào trùng với username và password trong hệ thống.
Trong chương trình chính, h~y tạo hai đối tượng của hai lớp HangHoa và
KhachHang. Username và Password của khách hàng nhập vào từ bàn phím.
Kiểm tra nếu username và password trùng với username và password
được thiết lập sẵn thì khi đó mới tiến hành khởi tạo đối tượng KhachHang,
nếu ngược lại, hủy bỏ giao dịch v{ in thông b|o: “Xin loi, tai khoan cua quy
khach khong ton tai trong 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, hãy thực hiện
h{nh động mua hàng của đối tượng khách hàng này (thao t|c mua được
nhập vào từ bàn phím).
BÀI THỰC HÀNH SỐ 3
Hàm tạo, sao chép hàm tạo, hàm bạn, con trỏ this
Lưu ý: trong bài thực hành ở chương này, chỉ cho phép sử dụng con trỏ đối
tượng để thực hiện. Mọi phương án sử dụng khai báo đối tượng thông
thường sẽ không được chấp nhận !
1. Quay trở lại với bài thực hành số 2. Hãy tạo chương trình bằng cách thay
thế c|c phương thức setter bằng các hàm tạo tương ứng. Hãy sử dụng con
trỏ this trong trường hợp này. Bổ sung phương thức ResetHangHoa cho
lớp HangHoa để đưa về các tham số mặc định cho các thuộc tính (xâu kí tự
thì thiết lập về “”, số nguyên/thực thì thiết lập về 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, hãy tạo con trỏ đối tượng để thực hiện h{nh động mua hàng và
h{nh động hủy bỏ.
2. Xây dựng lớp điểm Point và lớp hình tròn Round. Sử dụng hàm random
để tạo tọa độ ngẫu nhiên cho một đối tượng điểm trong hàm tạo của đối
tượng điểm. Cho trước tọa độ tâm của đường tròn, bán kính của nó. Hãy
đưa ra c|c kết luận về một điểm được khởi tạo nằm trong hay ngo{i đường
tròn. Đ}y l{ phương thức thành viên của lớp hình tròn.
Khuyến khích: Nên sử dụng hàm bạn và lớp bạn.
C++
T r a n g | 214
Phần Thực hành
BÀI THỰC HÀNH SỐ 4
Chồng chất Toán tử trong C++
Xây dựng 2 lớp số phức và lớp phân số. Sử dụng chồng chất toán tử để thực
hiện cá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 sao chép hàm tạo, 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) v{ phương thức tính
modul và argument của số phức. Xây dựng hàm chồng chất toán tử
nhập/xuất dữ liệu với lớp số phức này.
- Lớp phân số: phương thức khởi tạo, phương thức sao chép hàm tạo,
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 dữ liệu với lớp phân số này.
BÀI THỰC HÀNH SỐ 5
Kĩ thuật thừa kế trong C++
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 v{ phương thức sao chép hàm tạo.
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 v{ phương thức sao chép hàm tạo.
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 v{ phương thức sao chép
hàm tạo. 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 v{ phương thức sao chép hàm tạo.
Xây dựng hàm tính thể tích cho HinhKhoi3 (bằng chieucao*Pi*bankinh2).
C++
T r a n g | 215
Phần Thực hành
BÀI THỰC HÀNH SỐ 6
Lớp cơ sở trừu tượng trong C++
Xây dựng một lớp cơ sở trừu tượng Vector chứa ba phương thức ảo thuần
túy: TinhDoDai (tính độ dài), SinGoc (tính sin của góc giữa 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 là tọa độ x v{ y, hai phương thức setter (không sử
dụng hàm tạo trong trường hợp này, vì lớp trừu tượng không có khả năng
tạo ra một sự thể hiện, và hàm tạo cũng không được thừa kế); hoặc sử dụng
phương thức tham chiếu getter.
Xây dựng lớp Vector2D thừa kế từ lớp cơ sở trừu tượng Vector để thực thi
c|c phương thức ảo thuần túy nêu trên.
Xây dựng lớp Vector3D thừa kế từ lớp cơ sở trừu tượng Vector (bổ sung
thêm tọa độ z v{ c|c phương thức getter, setter tương ứng) để thực thi các
phương thức ảo thuần túy nêu trên.
Trong đó, Vector2D l{ vector 2 chiều (chỉ có hai tọa độ x và y); Vector3D là
vector 3 chiều (có ba tọa độ x, y và z).
THANG ĐIỂM ĐÁNH GIÁ KĨ NĂNG
Bài thực hành số 1 2 3 4 5 6
Điểm 20 15 20 15 20 10
Ngưỡng đạt 60-70
Cộng điểm 70-80 80-90 90-100
Quy đổi +1 +1.5 +2
- Mỗi bài thực hành có thể thực hiện ở nhà hoặc trên lớp, nhưng phải nộp
b{i đúng thời hạn.
- Hạn nộp mỗi bài thực h{nh tương ứng với buổi thực hành. Ví dụ: Bài thực
hành số 1 phải nộp đúng hạn vào buổi thứ nhất (mới đạt điểm tối đa). Nếu
muộn một buổi, trừ đi 2 điểm. Nếu nộp tất cả các bài vào buổi cuối cùng, thì
tối đa chỉ đạt Ngưỡng Đạt.
C++
T r a n g | 216
Phần Thực hành
- Điểm tổng kết môn học gồm có 4 cột điểm qu| trình v{ 1 điểm thi. Điểm
Quá trình 1 = Điểm chuyên cần; Điểm Quá trình 2, Điểm Quá trình 3 sẽ
tương ứng với 2 bài trắc nghiệm; Điểm Quá trình 4 = Điểm Thực hành/10.
Điểm thi cuối cùng sẽ bằng kết quả thi đạt được cộng thêm điểm Quy đổi.
Điểm tổng kết sẽ được tính theo công thức:
( )
C++
T r a n g | 217
Phần Bài tập
BÀI TẬP NÂNG CAO
Bài tập 1.
Xây dựng c|c h{m để tính các tổng sau đ}y:
( )
( )
( )
Trong đó: n , x và k là các tham số nhập vào từ bàn phím.
Bài tập 2.
Khai báo chuỗi kí tự bằng cách sử dụng con trỏ. Sau đó x}y dựng c|c h{m để
thực hiện các câu sau:
- Đếm số kí tự có giá trị là a.
- Đảo xâu kí tự.
- Đảo từ.
- Đếm số từ.
- Nhóm các kí tự cùng loại. Ví dụ:
Xâu ban đầu: aaabbbaacbd
Xâu in ra: 5a4b1c1d
- Thuật toán nén dữ liệu RLE (Run length Encoding) là thuật toán nén
không mất dữ liệu lossless. Nó được sử dụng để nén ảnh đối với định dạng
bmp. Thuật toán RLE sẽ thực hiện đếm số kí tự giống nhau và liên tiếp, sau
Trang | 218
Phần Bài tập
đó, sẽ thay thế toàn bộ dãy kí tự giống nhau này bằng số kí tự đếm được
sau đó l{ kí tự tương ứng. Ví dụ:
Xâu ban đầu: aaaabbbbcdddAA
Xâu sau khi nén: 4a4b1c3d2A
+ Hãy xây dựng h{m RLE để nén dữ liệu. Với dữ liệu nhập vào từ bàn phím.
+ Hãy xây dựng h{m IRLE để giải nén dữ liệu. Với dữ liệu nhập vào từ bàn
phím.
Bài tập 3.
Xây dựng các hàm thực hiện các chức năng sau đ}y trên mảng một chiều
bằng hai cách: khai báo theo kiểu thông thường và khai báo bằng con trỏ.
- Hàm nhập dữ liệu cho mảng 1 chiều.
- Hàm xuất dữ liệu cho mảng 1 chiều.
- Hàm tính tổng các phần tử của mảng.
- Hàm tính tổng các phần tử của mảng là số nguyên tố.
- Hàm tính tổng các phần tử của mảng là số chính phương.
- Hàm tính tổng các số nguyên tố của mảng lớn hơn 10 v{ nhỏ hơn 100.
- Hàm tính tổng các phần tử của mảng là số chính phương chẵn.
- Hàm đếm số phần tử của mảng là số nguyên tố.
- Hàm đếm số phần tử của mảng là số chính phương.
- Hàm đếm số phần tử của mảng là số nguyên tố lớn hơn 10 v{ nhỏ hơn 50.
- Hàm đếm số phần tử của mảng là số chính phương chẵn.
- Hàm tìm kiếm chỉ số phần tử có giá trị x của mảng.
- Hàm tính giá trị trung bình của mảng.
- Hàm tìm chỉ số của phần tử có giá trị nhỏ nhất.
- Hàm tìm chỉ số của phần tử có giá trị lớn nhất.
C++
T r a n g | 219
Phần Bài tập
- Hàm sắp xếp mảng theo thứ tự tăng dần (có thể sử dụng thuật toán sắp
xếp bất kì).
- Hàm tính giá trị trung bình của các phần tử của mảng có giá trị chẵn.
- Hàm dồn tất cả các phần tử chẵn về một phía, các phần tử lẻ về một phía.
Ví dụ, mảng ban đầu là: 1 4 5 6 2 3 thì kết quả sẽ là 1 5 3 4 6 2.
- H{m x|c định phần tử có giá trị gần với giá trị trung bình của mảng nhất.
- H{m đẩy các phần tử của mảng lên n vị trí. Ví dụ mảng ban đầu là 1 3 2 5 4
7 9. Nếu n = 2, thì mảng thu được sẽ là 7 9 1 3 2 5 4.
Bổ sung hàm main v{ c|c thư viện để nhận được một chương trình hoàn
chỉnh. Các hàm cần được khai báo theo prototype.
Bài tập 4.
Xây dựng c|c h{m để thực hiện các chức năng sau đ}y trên mảng hai chiều
bằng hai cách khai báo: theo kiểu thông thường và khai báo bằng con trỏ.
- Hàm nhập giá trị cho mảng hai chiều.
- Hàm xuất giá trị của 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 thế tất cả các phần tử có giá trị lẻ của ma trận thành 0.
- Hàm thay thế tất cả các phần tử âm của ma trận bằng phần tử dương
tương ứng.
- Hàm thay thế các phần tử có giá trị nhỏ hơn gi| trị trung bình của ma trận
bằng phần tử 0.
- H{m tính lũy thừa của ma trận vuông.
Các hàm yêu cầu được xây dựng theo prototype. Các ma trận (mảng hai
chiều) trong các bài tập trên là ma trận vuông. Bổ sung h{m main v{ c|c thư
viện cần thiết để được một chương trình ho{n chỉnh.
Bài tập 5.
C++
T r a n g | 220
Phần Bài tập
Hãy chọn lựa c|c phương ph|p phù hợp trong lập trình hướng đối tượng để
lập trình giải c|c b{i to|n sau đ}y.
a) Xây dựng lớp TamGiac (tam giác) gồm có ba cạnh với c|c 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ố và sao
chép hàm tạo.
- Các phương thức Getter.
- Phương thức KiemTra để cho biết nó có phải là một tam giác thực sự
không.
- Phương thức tính diện tích tam giác nếu nó là một tam giác thực sự.
- 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ó 3 tọa độ x, y, z v{ c|c phương thức
sau:
- C|c phương thức khởi tạo.
- C|c phương thức Getter.
- Phương thức tính khoảng cách giữa hai điểm.
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 v{ điểm mút). Hãy bổ sung c|c 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 của 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 của hai vector.
- Phương thức tính cosin góc giữa hai vector.
- Phương thức tính tích hữu hướng của hai vector.
C++
T r a n g | 221
Phần Bài tập
Xây dựng lớp HinhCau (hình cầu) gồm hai thuộc tính l{ đối tượng Diem
tương ứng với tâm hình cầu và bán kính R. Hãy bổ sung c|c 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 giữa hình cầu và một điểm.
- Phương thức x|c định vị trí tương đối giữa hai hình cầu.
Yêu cầu chung: hãy bổ sung các hàm toán tử nhập xuất cho mỗi lớp đối
tượng trên.
Bài 6.
Xây dựng lớp ConNguoi gồm có hai thuộc tính thành viên là: tên và tuổi. Các
phương thức khởi tạo v{ c|c phương thức Getter tương ứng.
Lớp NhanVien thừa kế từ lớp ConNguoi, bằng cách bổ sung thêm hai thuộc
tính l{: m~ nh}n viên, lương v{ mức đóng góp (tính theo lương). Bổ sung
phương thức khởi tạo v{ c|c phương thức Getter.
Các công ty quản lý nhân viên của mình. Đối tượng CongTy có các thuộc
tính: tên công ty, mức đóng góp chuẩn, ngân sách hiện có, nguồn thu theo
tháng, nguồn chi theo tháng. Giả sử nguồn chi này 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, v{ phương thức sa thải để sa thải nhân viên.
Một nhân viên sẽ bị sa thải, nếu mức đóng góp của họ nhỏ hơn mức đóng
góp chuẩn của công ty.
Một công ty sẽ tuyên bố phá sản nếu vốn điều lệ của họ bị âm. Vốn điều lệ là
tổng ngân sách hiện có cộng với mức đóng góp của mỗi nhân viên trừ cho
nguồn chi theo tháng và trừ tiếp cho tổng lương chi trả cho toàn bộ nhân
viên. Hãy xây dựng chương trình để thực thi mô tả này.
Bài 7.
Hãy xây dựng chương trình ứng dụng theo mô tả sau.
C++
T r a n g | 222
Phần Bài tập
- Lớp đối tượng người dùng gồm các thuộc tính: username, password, câu
hỏi bảo mật và câu trả lời. Bổ sung c|c 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 và password.
Nếu trùng khớp với username và password đ~ tạo trong hệ thống thì thông
b|o đăng nhập thành công.
- Sau khi đăng nhập th{nh công, người dùng có quyền triệu gọi c|c phương
thức tính toán của lớp số phức và 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 rằng
có phải họ đ~ quên mật khẩu hay không bằng một câu hỏi bảo mật. Nếu trả
lời đúng, thì cho phép họ thay đổi mật khẩu.
- Nếu đăng nhập không thành công và trả lời sai câu hỏi bảo mật, hãy in ra
thông b|o “Bạn chưa phải là thành viên”, h~y chọn “y” để đăng kí v{ chọn
“n” để thoát.
Bài 8.
Mỗi đối tượng Shape trong Microsoft Word đều có có các thuộc tính: màu
viền, màu nền, nội dung văn bản bên trong, thứ bậc, tình trạng đang được
chọn hay không v{ c|c phương thức khởi tạo, thay đổi giá trị cho mỗi thuộc
tính (phương thức setter).
Hãy tạo ra một mảng 10 phần tử Shape. Các giá trị thứ bậc không được
trùng nhau (và phân bố từ 0-9). Trong 10 đối tượng này, tại mỗi thời điểm,
chỉ có đúng một đối tượng đang ở tình trạng chọn. Nếu đối tượng ở tình
trạng chọn, thì ta mới có quyền thay đổi giá trị cho nó.
Hãy bổ sung thêm c|c phương thức cần thiết để thực hiện các yêu cầu trên.
Bài 9.
Hãy phân tích mô hình quản lý sinh viên trong trường đại học. Từ mô hình
ph}n tích được, hãy 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 dưới 10 lớp đối tượng.
Gợi ý: Các lớp đối tượng trong mô hình này 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
Bài 10.
C++
T r a n g | 223
Phần Bài tập
H~y ph}n tích theo hướng đối tượng mô hình quản lý Nh{ nước thu nhỏ
được cho bên dưới đ}y. Từ mô hình ph}n tích đó, h~y x}y dựng chương
trình để quản lý Nh{ nước thu nhỏ. Biết rằng, tương t|c giữa c|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
Cơ sở
Bộ Nông Nghiệp
Kế thừa Tương t|c
Hình 23 – Mô hình tương t|c quản lý Nh{ nước.
C++
T r a n g | 224
Phần Bài tập
BÀI TẬP LỚN
Dự án 1. Phân tích, thiết kế và 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 các chức năng sau đ}y:
- Trong mô hình quản lý này cần đảm bảo các 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á và số lượng.
- Cho phép bổ sung thêm một hoặc nhiều quyển sách.
- Cập nhập lại số lượng s|ch khi có người mượn/trả sách.
- Tìm kiếm sách theo tên tác giả hoặc tên sách.
- Kiểm tra tình trạng sách còn hay không.
- Chương trình thực thi trên màn hình Console. Có menu tùy chọn. Dữ liệu
được lưu trữ vào tập tin data.dat dưới dạng mã hóa nhị phân.
Dự án 2. Phân tích, thiết kế và 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 các chức năng sau
đ}y:
- Trong mô hình quản lý này, cần đảm bảo các 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 chỉ 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 v{ nước sản xuất.
- Kiểm tra tình trạng còn hàng hay không.
- Bổ sung (nhập thêm hàng) hoặc xóa bỏ (bán hàng).
- Chương trình thực thi trên màn hình Console. Có menu tùy chọn. Dữ liệu
được lưu trữ vào tập tin data.dat dưới dạng mã hóa nhị phân.
Dự án 3. Phân tích, thiết kế và xây dựng chương trình quản lý nhân viên
trong công ty. Trong chương trình trình n{y, cần đảm bảo các chức năng
sau đ}y: C++
T r a n g | 225
Phần Bài tập
- Trong mô hình quản lý này, cần đảm bảo các 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, bộ 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 bộ phận làm việc
- Bổ sung (tuyển dụng) hoặc xóa bỏ (kết thúc hợp đồng).
- Chương trình thực thi trên màn hình Console. Có menu tùy chọn. Dữ liệu
được lưu trữ vào tập tin data.dat dưới dạng mã hóa nhị phân.
Dự án 4. Phân tích, thiết kế và xây dựng game FarmVille (một game nổi
tiếng trên Facebook). Trong game này, cần đảm bảo các chức năng sau đ}y:
- Trong mô hình quản lý này, cần đảm bảo các thông tin: người chơi –
email, tên người chơi, tổng số tiền. C|c đối tượng trong 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 được của một người chơi.
- Bổ sung người chơi hoặc đối tượng trong game.
- Khi thu hoạch một đối tượng, thì trị giá của đối tượng sẽ được cập nhập
vào cho tổng tiền của người chơi, đồng thời đối tượng cũng sẽ bị hủy. Đối
tượng chỉ có thể được thu hoạch nếu: thời gian hiện tại – 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 đủ bài thực h{nh v{o trước buổi thứ 5 sẽ có cơ
hội nhận được bài tập lớn. Khi nhận được bài tập lớn, ngoài yêu cầu bổ sung
của giảng viên, sinh viên cần thực thi thên các yêu cầu sau:
- Phân tích mô hình lên giấy (nộp bản in).
C++
T r a n g | 226
Phần Bài tập
- Nộp chương trình ho{n chỉnh. Trong đó, chương trình hoàn chỉnh và tập
tin word (*.doc; *.docx) phải được ghi lên đĩa CD, bên ngo{i đĩa có ghi: tên
sinh viên, lớp v{ “B{i tập lớn: Lập trình hướng đối tượng C++. Giảng viên
hướng dẫn: .”.
C++
T r a n g | 227
DANH SÁCH HÌNH
Hình 1 – Tạo mới dự án trong CodeBlocks ................................................................ 10
Hình 2 – Khởi tạo th}n phương thức ............................................................................ 11
Hình 3 – Cấu hình MinGW trong Eclipse Helios ....................................................... 12
Hình 4 – Chọn đường dẫn đến thư mục bin của MinGW ...................................... 13
Hình 5 - Tạo mới dự án ....................................................................................................... 13
Hình 6 - Cấu trúc thư mục của một dự án ................................................................... 14
Hình 7 - Biên dịch một dự án ........................................................................................... 14
Hình 8 - Hộp thoại tạo mới class .................................................................................... 15
Hình 9 - Giao diện tổng thể của Visual Studio 2010 ............................................... 17
Hình 10 - Tạo dự án Win32 Console ............................................................................. 18
Hình 11 - Win32 Application Wizard ........................................................................... 18
Hình 12 - Bổ sung thêm một tập tin .............................................................................. 20
Hình 13 - Bổ sung thêm lớp đối tượng ........................................................................ 20
Hình 14 - Tạo lớp bằng Class Wizard ........................................................................... 21
Hình 15 - Xem biểu đồ lớp................................................................................................. 22
Hình 16 – Sơ đồ minh họa việc sử dụng hàm ............................................................ 72
Hình 17 – Tham chiếu trong con trỏ ............................................................................. 94
Hình 18 – Tham chiếu ngược trong con trỏ ............................................................... 95
Hình 19 – Tăng/Giảm địa chỉ của con trỏ ................................................................ 101
Hình 20 – Minh họa sơ đồ lớp ....................................................................................... 125
Hình 21 – Tính kế thừa .................................................................................................... 153
Hình 22 – Lớp cơ sở ảo .................................................................................................... 164
Hình 23 – Mô hình tương t|c quản lý Nh{ nước. .................................................. 224
Trang | 228
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 bản tiếng Anh Dịch sang tiếng Việt
Abstract base class Lớp cơ sở trừu tượng
Abstraction Tính trừu tượng
Arithmetic operators Toán tử số học
Assignment operators Toán tử gán
Base class Lớp cơ sở/ Lớp cha
Bitwise operators Toán tử dịch bit
Child class/SubClass Lớp con
Class Lớp
Comma operators Toán tử phân tách
Compound assignment operator Toán tử gán hợp nhất
Conditional operators Toán tử điều kiện
Encapsulation Tính đóng gói
Exception Ngoại lệ
Explicit type casting operators Toán tử chuyển đổi kiểu dữ liệu
Increase and decrease operators Toán tử tăng giảm
Information hiding Che dấu/ẩn dấu thông tin
Inheritance Tính thừa kế/ Tính kế thừa
Instance Sự thể hiện
Logical operators Toán tử logic
Multiple inheritance Tính đa thừa kết/Tính đa kế thừa
Object Đối tượng
Operator Toán tử
Operator overloading Chồng chất toán tử
Overload Chồng chất
Override Quá tải
Polymorphism Tính đa hình
Prototype Nguyên mẫu
Pure virtual function Hàm ảo thuần túy
Reference Tham chiếu
Relational and equality operators Toán tử quan hệ và so sánh
C++
T r a n g | 229
TÀI LIỆU THAM KHẢO
[1].
jsp // Mục: XL C/C++ V8.0 for AIX // Language Reference
[2].
us/library/3bstk3k5%28v=VS.80%29.aspx
[3]. Ivor Horton// Beginning Visual C++ 2010// Wrox pub.
[4]. C++ for Mathematicians// An introduction for Student and
Professional//Edward Scheinerman//Chapman & Hall/CRC.
C++
T r a n g | 230
Các file đính kèm theo tài liệu này:
- giao_trinh_mon_lap_trinh_huong_doi_tuong.pdf