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 7

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

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

Hệ thống Nhập/Xuất C++ • Cơ sở Nhập/Xuất C++ • Nhập/Xuất có định dạng • Sử dụng width(), precision() và fill() • Sử dụng bộ thao tác Nhập/Xuất • Tạo bộ chèn • Tạo bộ chiết

Chủ đề:
Lưu

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

  1. Chöông 7 Heä thoáng Nhaäp/Xuaát C++ • Cô sôû Nhaäp/Xuaát C++ • Nhaäp/Xuaát coù ñònh daïng • Söû duïng width(), precision() vaø fill() • Söû duïng boä thao taùc Nhaäp/Xuaát • Taïo boä cheøn • Taïo boä chieát
  2. 208 Chöông 7 Heä thoáng Nhaäp / Xuaát C++
  3. 209 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ I/ Cô sôû Nhaäp/Xuaát C++ Heä thoáng Nhaäp/Xuaát cuûa C++ cuõng ñieàu khieån caùc stream . • Stream laø moät thieát bò logic coù chöùc naêng taïo ra hoaëc söû duïng thoâng tin. Nhôø heä thoáng Nhaäp/Xuaát cuûa C++, moãi stream ñöôïc lieân keát vôùi thieát bò vaät lyù. Cho duø coù nhieàu loaïi thieát bò vaät lyù khaùc nhau, nhöng caùc stream ñeàu ñöôïc xöû lyù nhö nhau. Chính vì vaäy maø heä thoáng Nhaäp/Xuaát coù theå vaän haønh treân baát kyø loaïi thieát bò naøo. Khi moät chöông trình C++ ñöôïc thöïc thi seõ coù boán stream ñöôïc môû moät caùch töï ñoäng. Stream YÙ nghiaõ Thieát bò maëc ñònh cin thieát bò nhaäp chuaån Baøn phím cout thieát bò xuaát chuaån Maøn hình cerr thieát bò baùo loãi chuaån Maøn hình clog Phieân baûn cuûa cerr Maøn hình Coù theå ñònh laïi cho caùc stream ñeå lieân keát gaén vôùi caùc thieát bò xuaát nhaäp khaùc. • Trong chöông I, C++ cung caáp caùc hoå trôï cho heä thoáng Nhaäp/Xuaát trong file iostream.h Noäi dung cuûa file naøy laø caùc phaân caáp lôùp hoå trôï caùc thao taùc Nhaäp/Xuaát. C++ coù hai phaân caáp lôùp Nhaäp/Xuaát, chuùng coù lieân heä vôùi nhau nhöng chuùng khoâng gioáng nhau. Phaân caáp lôùp Nhaäp/Xuaát thöù nhaát ñöôïc suy daãn töø lôùp Nhaäp/Xuaát möùc thaáp teân laø streambuf. Lôùp naøy cung caáp caùc thao taùc cô baûn cuûa Nhaäp/Xuaát caáp thaáp, cuõng nhö caùc hoå trôï cô baûn cho toaøn boä heä thoáng Nhaäp/Xuaát cuûa C++. Laäp trình vieân trình ñoä cao neân söû duïng tröïc tieáp lôùp streambuf naøy. Phaân caáp lôùp Nhaäp/Xuaát thöù hai coù teân ios , laø lôùp Nhaäp/Xuaát caáp cao. Noù cung caáp caùc thao taùc veà ñònh daïng, kieåm loãi, chöùa nhieàu haøm vaø bieán duøng ñeå ñieàu khieån vaø kieåm soaùt caùc thao taùc cô baûn cuûa caùc stream Nhaäp/Xuaát. Lôùp ios laø lôùp cô sôû ñeå suy daãn ra caùc lôùp istream, ostream vaø iostream.h. Ba lôùp daãn xuaát naøy ñöôïc söû duïng ñeå taïo ra caùc stream Nhaäp, Xuaát vaø Nhaäp/Xuaát.
  4. 210 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ II/ Nhaäp/Xuaát coù ñònh daïng 1/ Moãi stream cuûa C++ ñöôïc ñi keøm vôùi caùc côø ñònh daïng (format flags). Caùc côø ñònh daïng naøy xaùc ñònh caùch thöùc theå hieän cuûa döõ lieäu, caùc côø ñöôïc maõ hoaù döôùi daïng soá nguyeân kieåu long int. Caùc côø ñònh daïng ñöôïc ñaët teân vaø giaù trò trong lôùp ios qua baûng lieät keâ nhö sau : // ios format flags enum{ skipws = 0x0001; left = 0x0002; right = 0x0004; internal = 0x0008; dec = 0x0010; oct = 0x0020; hex = 0x0040; showbase = 0x0080; showpoint = 0x0100; uppercase = 0x0200; showpos = 0x0400; scientific = 0x0800; fixed = 0x1000; unitbuf = 0x2000; stdio = 0x4000; }; Khi moät côø ñònh daïng naøo ñoù ñöôïc thieát laäp thì ñaëc tính cuûa côø ñoù trôû neân coù hieäu löïc. Neáu côø ñònh daïng bò xoaù, heä thoáng seõ duøng giaù trò maëc ñònh cho ñaëc tính cuûa côø ñoù. 2/ Moâ taû caùc côø ñònh daïng • Khi côø skipws ñöôïc thieát laäp, caùc kyù töï caùch (goàm caùc kyù töï khoaûng caùch, tab vaø xuoáng doøng) ñöôïc boû ñi khi ñoïc moät stream. Neáu côø naøy bò xoaù, caùc kyù töï caùch seõ khoâng bò boû ñi. Thöôøng aùp duïng cho moät soá kieåu file treân diaõ.
  5. 211 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ • Khi côø left ñöôïc thieát laäp, keát xuaát seõ ñöôïc canh bieân traùi. • Khi côø right ñöôïc thieát laäp, keát xuaát seõ ñöôïc canh bieân phaûi. • Khi côø internal ñöôïc thieát laäp, daáu cuûa trò soá ñöôïc canh bieân traùi trong khi con soá ñöôïc canh bieân traùi. Neáu caû ba côø ñeàu bò xoaù, theo maëc ñònh, keát xuaát seõ ñöôïc canh bieân phaûi. • Theo maëc ñònh, giaù trò nguyeân ñöôïc trình baøy döôùi daïng soá thaäp phaân. Tuy nhieân. coù theå thay ñoåi cô soá cuûa keát xuaát. Thieát laäp côø oct seõ laøm cho keát xuaát ñöôïc trình baøy döôùi daïng soá heä baùt phaân. Thieát laäp côø hex keát xuaát laø soá heä thaäp luïc. Ñeå traû laïi kieåu soá thaäp phaân, caàn thieát laäp côø dec. • Khi ñaët côø showbase, cô soá cuûa giaù trò soá ñöôïc trình baøy. • Khi ñaët côø showpoint cho pheùp in daáu chaám thaäp phaân vaø caùc soá khoâng ñi sau keøm theo caùc giaù trò kieåu daáu chaám ñoäng. • Theo maëc ñònh, khi moät con soá kieåu soá muõ ñöôïc in ra, chöõ "e" ñöôïc trình baøy ôû kieåu chöõ thöôøng. Töông töï, khi in moät giaù trò soá ôû heä thaäp luïc, kyù töï " duøng chæ heä thaäp luïc ñöôïc trình baøy ôû kieåu chöõ thöôøng. Khi côø upcase ñöôïc thieát laäp, caùc kyù töï noùi treân seõ ñöôïc trình baøy baèng kieåu chöõ in hoa. • Khi ñaët côø showpos laøm cho xuaát hieän daáu coäng phiaù tröôùc caùc giaù trò soá döông. • Khi ñaët côø scientific laøm caùc giaù trò soá kieåu daáu chaám ñoäng ñöôïc trình baøy döôí daïng muõ. Nhöng khi ñaët côø fixed, caùc giaù trò soá kieåu daáu chaám ñoäng ñöôïc trình baøy döôí daïng thöôøng coù 6 soá leõ. • Khi ñaët côø unitbuf, heä thoáng Nhaäp/Xuaát cuûa C++ ñaåy stream xuaát ra heát sau moãi thao taùc xuaát. • Khi ñaët côø stdio, thieát bò xuaát chuaån stdout vaø thieát bò nhaäp chuaån stdin seõ ñöôïc ñaåy ra sau moãi thao taùc xuaát. Tuy nhieân côø naøy khoâng ñöôïc ñònh nghiaõ trong chuaån truø ñònh ANSI C++, vaø coù theå khoâng aùp duïng trong moät soá trình bieân dòch. 3/ Caùc haøm lieân quan ñeán côø ñònh daïng
  6. 212 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ • Haøm setf() duøng thieát laäp côø ñònh daïng. Haøm naøy thuoäc lôùp ios. Daïng toång quaùt : long setf(long flags) ; Haøm traû veà giaù trò ñöôïc thieát laäp tröôùc ñoù cuûa côø vaø thieát laäp caùc côø coù teân trong haøm. Ví duï thieát laäp côø showpos : stream.setf(ios::showpos) ; stream laø teân stream caàn ñeå thieát laäp côø showpos Löu yù, trong C++, khoâng theå ñaët côø ñònh daïng ôû phaïm vi toaøn cuïc chung cho taát caû caùc stream, moãi stream seõ mang moät thoâng tin traïng thaùi caùc ñònh daïng rieâng cuûa noù vaø chuùng ñoäc laäp vôùi nhau. Coù theå goïi haøm setf() ñeå laäp nhieàu côø cuøng luùc, baèng caùch duøng toaùn töû OR. Ví duï cout.setf(ios::showbase | ios::hex) ; • Haøm xoaù côø unsetf(), duøng ñeå xoaù moät hay nhieàu côø ñònh daïng. Daïng toång quaùt : long unsetf(long flags) ; Haøm traû veà giaù trò tröôùc ñoù cuûa côø. • Haøm flags() cho bieát traïng thaùi cuûa côø ñònh daïng. Haøm naøy thuoäc lôùp ios. Daïng long flags() ; thöôøng goïi : long flags(long f) ; Daïng coù keøm ñoái soá cho pheùp thieát laäp taát caû caùc côø ñònh daïng cuûa stream döïa theo giaù trò cuûa ñoái soá khi goïi haøm. Töøng bit cuûa giaù trò f seõ ñöôïc gaùn cho bieán löu trò côø ñònh daïng, vaø seõ xoaù tình traïng côø ñònh daïng tröôùc ñoù. Haøm seõ traû veà giaù trò tình traïng caùc côø ñònh daïng tröôùc ñoù. Ví duï 2.1 Minh hoaï haøm setf() #include
  7. 213 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ int main() { // display using default settings cout
  8. 214 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ cout.unsetf(ios::dec); cout.setf(ios::uppercase | ios::showbase | ios::hex); cout
  9. 215 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ if(f & ios::skipws) cout
  10. 216 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ if(f & ios::unitbuf) cout
  11. 208 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ { // show default condition of format flags showflags(); // showpos, showbase, oct, right are on, others off long f = 0x04A4; cout.flags(f); // set flags showflags(); return 0; } Baøi taäp II 1. Haõy vieát chöông trình thieát laäp traïng thaùi caùc côø ñònh daïng, sao cho caùc giaù trò nguyeân döông ñöôïc in ra coù mang daáu +. Haõy in ra cho bieát laø caùc côø ñònh daïng ñaõ ñöôïc thieát laäp. 2. Haõy vieát chöông trình ñeå thieát laäp traïng thaùi caùc côø ñònh daïng cuûa stream cout sao cho caùc giaù trò soá kieåu daáu chaám ñoäng ñöôïc trình baøy vôùi daáu chaám thaäp phaân. Ngoaøi ra, caùc giaù trò soá kieåu daáu chaám ñoäng ñöôïc in ra döôùi daïng soá muõ, vôùi kyù töï "E" chæ phaàn muõ ñöôïc trình baøy baèng kieåu chöõ in hoa. 3. Haõy vieát chöông trình thöïc hieän chöùc naêng löu laïi traïng thaùi hieän taïi cuûa caùc côø ñònh daïng, tieáp ñeán thieát laäp hai côø showbase vaø hex, roài xuaát ra giaù trò 100, cuoái cuøng laäp laïi traïng thaùi ban ñaàu cuûa caùc côø traïng thaùi. III/ Söû duïng caùc haøm width(), precision() vaø fill()
  12. 209 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ Caùc haøm naøy thieát laäp caùc tham soá ñònh daïng goàm : ñoä roäng cuûa tröôøng, ñoä chính xaùc vaø kyù töï laáp ñaày. Haøm int width(int w) ; vôùi w laø ñoä roäng cuûa tröôøng Haøm traû veà ñoä roäng cuûa tröôøng tröôùc ñoù. Haøm int precision(int p); vôùi p laø chính xaùc caàn thieát laäp Haøm traû veà giaù trò laø chính xaùc tröôùc ñoù. Haøm char fill (char ch); vôùi ch laø kyù töï laáp ñaày môùi Haøm traû veà kyù töï laáp ñaày tröôùc ñoù. Ví duï 3.1 #include int main() { cout.width(10); // set minimum field width cout
  13. 210 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ return 0; } Keát quaû cuûa chöông trình hello %%%%%%%hello hello%%%% 123.234567%% 123.234%%% Ví duï 3.2 Caùc haøm ñònh daïng Nhaäp/Xuaát cuûa C++ // Create a table of square roots and squares. #include #include int main() { double x; cout.precision(4); cout
  14. 211 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ 1. Haõy vieát chöông trình thieát in ra logarit cô soá töï nhieân vaø logarit cô soá thaäp phaân cuûa caùc con soá töø 2 ñeán 100. Ñònh daïng baûng soá sao cho caùc con soá ñöôïc canh bieân phaûi vôùi ñoä roäng tröôøng laø 10. Söû duïng ñoä chính xaùc laø 5. 2. Taïo moät haøm mang teân laø : void center(char *s) ; Chöùc naêng cuûa haøm laø canh giöõa moät chuoãi kyù töï treân maøn hình. Ñeå thöïc hieän haøm naøy, haõy söû duïng haøm width(). Giaû söû maøn hình coù ñoä roäng 80 coät (vaø ñeå cho ñôn giaûn, giaû söû chuoãi kyù töï coù chieàu daøi < 80 kyù töï). IV/ Söû duïng boä thao taùc Nhaäp/Xuaát (I/O Manipulator) Boä thao taùc Nhaäp/Xuaát laø caùc haøm ñaëc bieät söû duïng trong caùc meänh ñeà Nhaäp/Xuaát. Caàn phaûi naïp file tieâu ñeà iomanip.h vaøo chöông trình. Caùc boä thao taùc Nhaäp/Xuaát chuaån ñöôïc trình baøy trong baûng sau : Boä thao taùc Muïc ñích Nhaäp/Xuaát dec Ñònh daïng döõ lieäu kieåu soá ôû daïng thaäp phaân Xuaát endl Xuaát moät kyù töï xuoáng doøng vaø Xuaát ñaåy stream ra thieát bò vaät lyù ends Xuaát moät kyù töï roãng Xuaát flush Ñaåy stream ra thieát bò vaät lyù Xuaát hex Ñònh daïng döõ lieäu kieåu soá ôû daïng thaäp luïc phaân Xuaát oct Ñònh daïng döõ lieäu kieåu soá ôû daïng baùt phaân Xuaát resetiosflags(long f) Xoùa caùc côø xaùc ñònh trong f Nhaäp/Xuaát setbase(int base) Ñaët cô soá thaønh base Xuaát setfill(int ch) Ñaët ch laøm kyù töï laáp ñaày Xuaát setiosflags(long f) Thieát laäp caùc côø xaùc ñònh trong f Nhaäp/Xuaát setprecision(int p) Ñaët ñoä chính xaùc laø p Xuaát setw(int w) Ñaët ñoä roäng cuûa tröôøng laø w Xuaát ws Boû qua caùc kyù töï caùch (khoaûng caùch, tab, xuoáng Nhaäp doøng) Caùc boä thao taùc coù theå xuaát hieän trong caùc meänh ñeà Nhaäp/Xuaát. Ví duï cout
  15. 212 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ cout
  16. 213 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ // This version uses I/O manipulators to display the table of squares and square roots. #include #include #include int main() { double x; cout
  17. 214 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ Quaù taûi toaùn töû Nhaäp/Xuaát cho caùc lôùp töï taïo laø moät trong nhöõng lyù do quyeát ñònh söû duïng meänh ñeà Nhaäp/Xuaát cuûa C++ thay cho vieäc söû duïng caùc haøm Nhaäp/Xuaát theo kieåu C. • Theo C++, thao taùc xuaát coøn ñöôïc goïi laø cheøn (insert), toaùn töû
  18. 215 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ @ C++ cho pheùp boä cheøn laø haøm friend cuûa lôùp maø noù thao taùc. Ví duï 5.1 Lôùp coord chöùa boä cheøn laø haøm friend // Use a friend inserter for objects of type coord. #include class coord { int x, y; public: coord() { x = 0; y = 0; } coord(int i, int j) { x = i; y = j; } friend ostream &operator
  19. 216 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ cout
  20. 217 Chöông 7 Heä thoáng Nhaäp / Xuaát C++ // This program draws right triangles #include class triangle { int height, base; public: triangle(int h, int b) { height = h; base = b; } friend ostream &operator
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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