Giáo trình môn Lập trình hướng đối tượ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 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.

pdf231 trang | Chia sẻ: hachi492 | Ngày: 08/01/2022 | Lượt xem: 377 | Lượt tải: 0download
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:

  • pdfgiao_trinh_mon_lap_trinh_huong_doi_tuong.pdf
Tài liệu liên quan