intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Kỹ thuật lập trình hướng đối tượng - Chapter 8

Chia sẻ: Nguyễn Nhi | Ngày: | Loại File: PDF | Số trang:42

63
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nhập/Xuất C++ nâng cao • Tạo Bộ thao tác Nhập/Xuất • Nhập/Xuất File • Nhập/Xuất File nhị phân không định dạng • Các hàm Nhập/Xuất nhị phân • Truy cập ngẫu nhiên • Kiểm tra trạng thái Nhập/Xuất • Nhập/Xuất theo đơn đặt hàng và các File • Nhập/Xuất theo mảng

Chủ đề:
Lưu

Nội dung Text: Kỹ thuật lập trình hướng đối tượng - Chapter 8

  1. Chöông 8 Nhaäp/Xuaát C++ naâng cao • Taïo Boä thao taùc Nhaäp/Xuaát • Nhaäp/Xuaát File • Nhaäp/Xuaát File nhò phaân khoâng ñònh daïng • Caùc haøm Nhaäp/Xuaát nhò phaân • Truy caäp ngaãu nhieân • Kieåm tra traïng thaùi Nhaäp/Xuaát • Nhaäp/Xuaát theo ñôn ñaët haøng vaø caùc File • Nhaäp/Xuaát theo maûng
  2. 228 Chöông 8 Nhaäp / Xuaát C++ naâng cao
  3. 229 Chöông 8 Nhaäp / Xuaát C++ naâng cao I/ Taïo Boä thao taùc Nhaäp/Xuaát Ngoaøi boä cheøn vaø boä chieát, coù theå söûa ñoåi heä thoáng nhaäp/xuaát cuûa C++ baèng caùch taïo ra boä thao taùc nhaäp/xuaát töï taïo. Noù coù hai lyù do : * moät boä thao taùc coù theå hôïp nhaát moät daõy caùc thao taùc nhaäp/xuaát thaønh moät boä thao taùc töï taïo. * moät boä thao taùc nhaäp/xuaát töï taïo caàn thieát khi nhaäp/xuaát treân caùc thieát bò khoâng chuaån (maùy in ñaëc bieät hay heä thoáng nhaän daïng quang hoïc) . Coù hai loaïi boä thao taùc, moät duøng cho caùc stream nhaäp, moät duøng cho caùc stream xuaát. Ngoaøi ra ngöôøi ta coøn phaân thaønh hai nhoùm : boä thao taùc coù tham soá vaø boä thao taùc khoâng coù tham soá, chuùng khaùc nhau veà caùch taïo ra boä thao taùc. Vieäc taïo ra boä thao taùc coù tham soá khoâng thuoäc phaïm vi baøi giaûng naøy. • Daïng toång quaùt cuûa caùc boä thao taùc xuaát khoâng coù tham soá : ostream &manip_name(ostream &stream) { // program codes return stream } teân cuûa boä thao taùc ñöôïc taïo ra manip_name Löu yù : boä thao taùc treân coù ñoái soá laø moät tham chieáu ñeán stream maø noù thao taùc, khi goïi boä naøy, khoâng ñöôïc keøm theo teân boä thao taùc baát kyø moät ñoái soá naøo. • Daïng toång quaùt cuûa caùc boä thao taùc nhaäp khoâng coù tham soá : istream &manip_name(istream &stream) { // program codes return stream }
  4. 230 Chöông 8 Nhaäp / Xuaát C++ naâng cao Moät boä thao taùc nhaäp nhaän moät tham chieáu ñeán stream maø noù thao taùc. Stream naøy phaûi ñöôïc traû veà bôûi boä thao taùc. Ví duï 1.1 Chöông trình taïo ra boä thao taùc xuaát setup(). Khi ñöôïc goïi, boä naøy seõ thieát laäp ñoä roäng tröôøng laø 10, ñoä chính xaùc laø 4 vaø daáu "* " laø kyù töï laáp ñaày. #include ostream &setup(ostream &stream) { stream.width(10); stream.precision(4); stream.fill('*'); return stream; } int main() { cout
  5. 231 Chöông 8 Nhaäp / Xuaát C++ naâng cao // Please note: ostream &note(ostream &stream) { stream
  6. 232 Chöông 8 Nhaäp / Xuaát C++ naâng cao } while (strcmp(pw, "password")); cout
  7. 233 Chöông 8 Nhaäp / Xuaát C++ naâng cao II/ Nhaäp/Xuaát File 1/ Khaùi nieäm Ñeå söû duïng nhaäp/xuaát file trong chöông trình caàn phaûi naïp file fstream.h . File naøy ñònh nghiaõ nhieàu lôùp goàm ifstream, ofstream vaø fstream. Ba lôùp naøy ñöôïc suy daãn töø hai lôùp istream vaø ostream, vaø ios laø lôùp cô sôû cuûa chuùng. Do ñoù caùc lôùp ifstream, ofstream vaø fstream cuõng coù theå truy xuaát ñeán taát caû caùc thao taùc ñaõ ñònh nghóa trong ios. Trong C++, moät file ñöôïc môû baèng caùch lieân keát noù vôùi moät stream. Coù ba loaïi stream : nhaäp, xuaát vaø nhaäp/xuaát. Tröôùc khi môû file phaûi taïo ra stream töông öùng. Ñeå taïo moät stream nhaäp, caàn khai baùo stream ñoù thuoäc lôùp ifstream. Ñeå taïo moät stream xuaát, caàn khai baùo stream ñoù thuoäc lôùp ofstream. Ñoái vôùi stream thöïc hieän caû thao taùc nhaäp vaø xuaát, caàn khai baùo stream ñoù thuoäc lôùp fstream. Ví duï ifstream in; // input stream ofstream out; // output stream fstream io; // input and output stream 2/ Môû file a/ Sau khi taïo ra moät stream, coù theå môû file gaén vôùi stream ñoù baèng haøm open(). Haøm naøy laø haøm thaønh phaàn cuûa ba stream noùi treân, daïng toång quaùt : void open(const char *filename, int mode, int access); teân cuûa file caàn môû, coù theå ñi keøm vôùi ñöôøng daãn. filename xaùc ñònh cheá ñoä cuûa file ñöôïc môû. mode xaùc ñònh caùch truy caäp file access @ Caùc giaù trò nguyeân cuûa mode, coù theå laø moät hay nhieàu giaù trò (ñöôïc keá thöøa bôûi fstream.h) • Cheá ñoä ios::app laøm cho keát xuaát ñöôïc theâm vaøo cuoái cuûa file. Duøng cho caùc file xuaát.
  8. 234 Chöông 8 Nhaäp / Xuaát C++ naâng cao • Cheá ñoä ios::ate cho pheùp chuyeån ñeán vò trí cuoái file ngay sau khi file ñöôïc môû. Löu yù, maëc duø ñang ôû vò trí cuoái file, caùc thao taùc nhaäp/xuaát vaãn coù theå xuaát hieän ôû baát cöù vò trí naøo cuûa file. • Cheá ñoä ios::in xaùc ñònh file ñöôïc môû laø file nhaäp. Cheá ñoä ios::out xaùc ñònh file ñöôïc môû laø file xuaát. Tuy nhieân, vieäc taïo ra moät stream baèng caùc khai baùo noù thuoäc lôùp ifstream ngaàm ñònh noù laø moät stream nhaäp, cuõng nhö khai baùo stream thuoäc lôùp ofstream ngaàm ñònh noù laø moät stream xuaát. Trong hai tröôøng hôïp treân, khoâng caàn phaûi xaùc ñònh caùc giaù trò ios::in vaø ios::out khi môû file. • Cheá ñoä ios::binary laøm cho file ñöôïc môû ôû cheá ñoä nhò phaân. Theo maëc ñònh, taát caû caùc file ñöôïc môû ôû cheá ñoä vaên baûn (text mode). Trong cheá ñoä vaên baûn, seõ coù moät soá tröôøng hôïp kyù töï seõ bò chuyeån ñoåi. Ví duï, kyù töï taïo doøng môùi ( '\n' ) seõ ñöôïc chuyeån thaønh chuoåi lieân tieáp nhau cuûa hai kyù töï xuoáng doøng (carriage return, maõ 13), vaø theâm moät doøng (line-feed, maõ 10). Khi hoaït ñoäng ôû cheá ñoä nhò phaân, seõ khoâng coù baát kyø moät tröôøng hôïp chuyeån ñoåi kyù töï naøo. Baát kyø moät file naøo ñeàu coù theå hoaït ñoäng ôû hai cheá ñoä vaên baûn hay nhò phaân. • Cheá ñoä ios::nocreate laøm cho vieäc goïi haøm open() bò thaát baïi neáu file ñöôïc môû laø moät file môùi (chöa coù saün treân ñiaõ). Coøn ios::noreplace laøm cho vieäc goïi haøm open() bò thaát baïi neáu file ñöôïc môû ñaõ coù saün treân ñiaõ. • Cheá ñoä ios::trunc laøm cho khi file coù saün truøng teân vôùi file ñöôïc môû seõ bò xoaù saïch noäi dung. Coù theå söû duïng keát hôïp hai hay nhieàu cheá ñoä ôû treân baèng pheùp toaùn OR. @ Caùc giaù trò cuûa ñoái soá access xaùc ñònh caùch truy caäp file. Giaù trò ngaàm ñònh cuûa ñoái soá naøy laø filebuf::openprot (filebuf laø lôùp cha cuûa caùc lôùp stream). Trong moâi tröôøng UNIX noù coù giaù trò 0x644 ñoái vôùi caùc file thoâng thöôøng. Trong moâi tröôøng DOS/WINDOWS giaù trò cuûa ñoái soá access qui ñònh maõ thuoäc tính cuûa file, bao goàm :
  9. 235 Chöông 8 Nhaäp / Xuaát C++ naâng cao Thuoäc tính YÙ nghiaõ 0 Archive File bình thöôøng : ghi / ñoïc (maëc ñònh) 1 Read only File chæ ñoïc 2 Hidden File aån 4 System File heä thoáng 8 Save Thuoäc tính löu tröõ Coù theå söû duïng keát hôïp hai hay nhieàu thuoäc tính ôû treân baèng pheùp toaùn OR. • Ví duï ñoaïn chöông trình sau minh hoaï vieäc môû file bình thöôøng trong DOS/WINDOWS ofstream out ; // khai baùo stream xuaát out.open("test.txt", ios::out, 0) ; out.open("test.txt") ; // lôøi goïi ngaén goïn, thoâng thöôøng. hoaëc • Ñeå môû file nhaäp/xuaát, caàn phaûi xaùc ñònh caû hai cheá ñoä ios::in vaø ios::out cho ñoái soá mode, ñöôïc minh hoaï sau ñaây. Löu yù, khoâng coù giaù trò maëc ñònh cho tröôøng hôïp naøy. fstream mystream; // khai baùo stream xuaát mystream.open("test.txt", ios::in | ios::out) ; Neáu haøm open() khoâng thöïc thi ñöôïc, stream ñöôïc traû veà seõ mang giaù trò khoâng. Do ñoù, caàn kieåm tra laïi vieäc môû file coù thaønh coâng hay khoâng, tröôùc khi truy xuaát noù. Ví duï : if(! mystream) { cout
  10. 236 Chöông 8 Nhaäp / Xuaát C++ naâng cao Thoâng thöôøng, khoâng caàn duøng haøm open() ñeå môû file, vì caùc lôùp ifstream, ofstream vaø fstream ñaõ coù saün caùc haøm taïo duøng ñeå môû file moät caùch töï ñoäng. Caùc haøm taïo naøy coù caùc ñoái soá gioáng heät nhö cuûa haøm open(). Daïng thoâng thöôøng môû file ñeå nhaäp : ifstream mystream("test.txt"); Caàn kieåm tra laïi vieäc môû file coù thaønh coâng hay khoâng, tröôùc khi truy xuaát noù. 3/ Ñoùng file Duøng haøm void close(). Haøm naøy khoâng coù ñoái soá vaø khoâng traû veà giaù trò naøo caû. Ví duï ñoùng moät file ñang gaén vôùi stream mystream, caàn goïi : mystream.close(); • Ñeå kieåm tra tình traïng heát file duøng haøm eof() int eof(); Haøm traû veà giaù trò ≠ 0 khi ñang ôû tình traïng cuoái file. giaù trò = 0 ngöôïc laïi. Ví duï mystream.eof(); 4/ Truy xuaát noäi dung treân file Toaùn töû xuaát > ñöôïc söû duïng ñeå truy xuaát noäi dung treân file, caàn phaûi thay caùc stream cin vaø cout baèng stream lieân keát vôùi file. Thoâng tin löu treân file coù cuøng ñònh daïng nhö khi noù ñöôïc trình baøy treân maøn hình. Do ñoù, caùc file taïo ra baèng toaùn töû xuaát > ñeàu laø caùc file vaên baûn coù ñònh daïng. Ví duï 2.1 Taïo moät file xuaát, ghi leân file, ñoùng file. Môû file ñoù nhö moät file nhaäp, ñoïc noäi dung cuûa file. #include #include
  11. 237 Chöông 8 Nhaäp / Xuaát C++ naâng cao #include int main() { ofstream fout("test.txt"); // create output file if(!fout) { cout
  12. 238 Chöông 8 Nhaäp / Xuaát C++ naâng cao Hello! 100 64 Ví duï 2.2 Chöông trình ñoïc töø baøn phím moät chuoåi kyù töï, ghi leân file, ñoùng file. Chöông trình keát thuùc khi nhaäp moät doøng troáng. Môû file ñoù nhö moät file nhaäp, ñoïc noäi dung cuûa file. // WRITE.CPP #include #include #include int main(int argc, char *argv[]) // argc : soá caùc tham soá , // *argv[] : chöùa noäi dung caùc tham soá { if(argc!=2) { cout
  13. 239 Chöông 8 Nhaäp / Xuaát C++ naâng cao } while (*str != '$'); out.close(); return 0; } Ví duï 2.3 Chöông trình seõ sao cheùp moät text file, trong ñoù caùc daáu khoaûng caùch seõ ñöôïc thay baèng daáu '|'. // CONVERT.CPP // Convert spaces to |s. #include #include int main(int argc, char *argv[]) { if(argc != 3) { cout
  14. 240 Chöông 8 Nhaäp / Xuaát C++ naâng cao while(!fin.eof()) { fin >> ch; if(ch == ' ' ) ch = '|'; fout
  15. 241 Chöông 8 Nhaäp / Xuaát C++ naâng cao 1/ Caùc haøm nhaäp/xuaát caáp thaáp • Ñoïc ghi töøng kyù töï Daïng phoå bieán cuûa chuùng : istream &get(char &ch); ostream &put(char ch); Haøm get() ñoïc moät kyù töï töø stream töông öùng vaø gaùn kyù töï ñoù vaøo noäi dung cuûa ch. Haøm traû veà moät tham chieáu ñeán stream, noù seõ laø NULL neáu ñeán cuoái file. Haøm put() ghi (xuaát) noäi dung cuûa ch ra moät stream vaø traû veà moät stream. • Ñoïc ghi caùc khoái döõ lieäu nhò phaân istream &read(unsigned char *buf, int num); ostream &write(const unsigned char *buf, int num); Haøm read() ñoïc moät soá löôïng num caùc byte töø stream töông öùng vaø ghi leân moät vuøng ñeäm ñöôïc troû bôûi buf. Haøm write() ghi moät soá löôïng num caùc byte ôû vuøng ñeäm ñöôïc troû bôûi buf ñeán stream töông öùng. Neáu file ñöôïc ñoïc heát tröôùc khi ñuû num kyù töï, haøm read() hoaøn taát bình thöôøng vaø vuøng ñeäm chöùa heát soá kyù töï cuûa laàn ñoïc cuoái. Ñeå bieát laàn cuoái naøy coù bao nhieâu kyù töï ñöôïc ñöa ra vuøng ñeäm, duøng haøm gcount() coù daïng int gcount(); Haøm seõ traû veà giaù trò laø toång soá kyù töï ñoïc ñöôïc ôû laàn ñoïc cuoái ngay tröôùc khi heát file. Löu yù : vieäc thieát laäp cheá ñoä ios::binary chæ nhaèm muïc ñích ngaên ngöøa vieäc chuyeån ñoåi kyù töï. Khi söû duïng caùc haøm nhaäp/xuaát file nhò phaân khoâng ñònh daïng, khoâng caàn môû file ôû cheá ñoä ios::binary. Ví duï 3.1 Chöông trình xuaát noäi dung cuûa moät file baát kyø ra maøn hình // PR.CPP
  16. 242 Chöông 8 Nhaäp / Xuaát C++ naâng cao #include #include int main(int argc, char *argv[]) { char ch; if(argc!=2) { cout
  17. 243 Chöông 8 Nhaäp / Xuaát C++ naâng cao if(argc!=2) { cout
  18. 244 Chöông 8 Nhaäp / Xuaát C++ naâng cao if(!out) { cout
  19. 245 Chöông 8 Nhaäp / Xuaát C++ naâng cao double num; char str[80]; in.read((char *) &num, sizeof(double)); in.read(str, 14); str[14] = '\0'; // null terminate str cout
  20. 246 Chöông 8 Nhaäp / Xuaát C++ naâng cao return 1; } in.read((char *) &nums, sizeof(nums)); int i; for(i=0; i
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2