Xem mẫu

  1. Ch¬ng 1 Giíi thiÖu vÒ ng«n ng÷ C++ Kh¶ n¨ng tæ chøc vµ xö lý th«ng tin lµ yÕu tè chÝnh dÉn ®Õn thµnh c«ng trong thêi ®¹i hiÖn nay. C¸c m¸y tÝnh ®îc thiÕt kÕ ®Ó kÕt nèi vµ xö lý mét lîng lín c¸c th«ng tin nhanh vµ hiÖu qu¶. Tuy nhiªn chóng kh«ng thÓ lµm ®îc bÊt cø viÖc g× khi mµ mét ngêi nµo ®ã cha nãi víi chóng nh÷ng g× ph¶i lµm. Nh÷ng c«ng viÖc mµ ngêi ta yªu cÇu ph¶i thùc hiÖn, th× ®ã chÝnh lµ nh÷ng c¸i mµ C++ cã thÓ lµm. C++ lµ mét ng«n ng÷ lËp tr×nh bËc cao, nã cho phÐp nh÷ng kü s phÇn mÒm trao ®æi th«ng tin mét c¸ch hiÖu qu¶ ®èi víi m¸y tÝnh. C++ lµ mét ng«n ng÷ cã kh¶ n¨ng thÝch øng vµ cã tÝnh mÒm dÎo cao. Tõ khi nã ®îc t¹o ra n¨m 1980, nã ®· ®îc sö dông réng r·i víi c¸c ch- ¬ng tr×nh bao gåm c¬ së cho c¸c bé vi ®iÒu khiÓn, c¸c hÖ thèng ®iÒu hµnh, c¸c øng dông, vµ ®å ho¹. C++ nhanh chãng trë thµnh mét ng«n ng÷ lËp tr×nh ®îc a chuéng. Cã mét sù yªu cÇu lín ®èi víi nh÷ng ngêi lµm viÖc víi m¸y tÝnh lµ hä ph¶i cã kh¶ n¨ng yªu cÇu lµm nh÷ng c«ng viÖc mµ hä cÇn, vµ C++ cho phÐp hä lµm viÖc nhanh chãng vµ hiÖu qu¶. S¬ lîc vÒ lÞch sö ph¸t triÓn cña C++ N¨m 1970 hai nhµ lËp tr×nh lµ Brian Kemighan vµ Dennis Ritchie t¹o ra mét ng«n ng÷ míi ®îc gäi lµ C (Gäi lµ ng«n ng÷ C bëi v× C ®øng tríc mét ng«n ng÷ cò mµ hä sö dông cã tªn lµ B). C ®îc thiÕt kÕ víi mét môc ®Ých chñ yÕu lµ: viÕt hÖ thèng ®iÒu hµnh. Ng«n ng÷ nµy rÊt ®¬n gi¶n, mÒm dÎo vµ nã sím ®îc sö dông réng r·i cho nhiÒu d¹ng ch¬ng tr×nh kh¸c nhau. Cuèi cïng C ®· nhanh chãng trë thµnh mét trong nh÷ng ng«n ng÷ th«ng dông nhÊt trªn thÕ giíi. Tuy nhiªn ng«n ng÷ C cã mét vÊn ®Ò chÝnh, nã lµ mét ng«n ng÷ h- íng ®èi tîng, nghÜa lµ khi thiÕt kÕ mét ch¬ng tr×nh C, ngêi lËp tr×nh b¾t ®Çu víi viÖc m« t¶ d÷ liÖu vµ viÕt c¸c thñ tôc ®Ó thao t¸c víi c¸c d÷ liÖu ®ã. Cuèi cïng nh÷ng ngêi lËp tr×nh kh¸m ph¸ ra r»ng ng÷ng qu¸ trÝnh trªn nã lµm cho ch¬ng tr×nh trë lªn râ rµng vµ dÔ hiÓu nÕu hä cã thÓ ®a vµo mét bunch d÷ liÖu vµ nhãm chóng vµo víi nhau víi c¸c thao t¸c mµ lµm viÖc trªn c¸c d÷ liÖu ®ã. Nh vËy mét nhãm ®îc gäi lµ mét object (®èi tîng) hoÆc class (líp). ThiÕt kÕ c¸c ch¬ng tr×nh b»ng c¸ch thiÕt kÕ c¸c class ®îc biÕt ®Õn nh thiÕt kÕ híng ®èi tîng (object-oriented design _ OOD) N¨m 1980 Bjarne Stroustrup b¾t ®Çu lµm viÖc trªn mét ng«n ng÷ míi gäi lµ “C víi class”. Ng«n ng÷ nµy c¶i tiÕn tõ ng«n ng÷ C b»ng c¸ch thªm
  2. mét sè ®Æc ®iÓm míi, vµ ®Æc biÖt quan träng lµ vÒ class. Ng«n ng÷ nµy ®îc c¶i tiÕn, bæ sung, vµ cuèi cïng nã trë thµnh C++. C++ víi nh÷ng thµnh c«ng cña nã, trªn thùc tÕ lµ nã cho phÐp nh÷ng ngêi lËp tr×nh tæ chøc vµ xö lý th«ng tin hiÖu qu¶ h¬n hÇu hÕt c¸c ng«n ng÷ kh¸c. H¬n n÷a, nã ®îc x©y dùng trªn nh÷ng viÖc ®· ®îc lµm víi ng«n ng÷ C. Trªn thùc tÕ hÇu hÕt c¸c ch¬ng tr×nh C cã thÓ chuyÓn ®æi sang ch¬ng tr×nh C++ víi mét chót thay ®æi. Nh÷ng ch¬ng tr×nh nµy thêng kh«ng sö dông hÕt tÊt c¶ nh÷ng ®Æc ®iÓm míi cña C++, nh- ng chóng vÉn cã thÓ thùc hiÖn ®îc c«ng viÖc. Trong trêng hîp nµy, C++ cho phÐp c¸c nhµ lËp tr×nh x©y dùng dùa trªn nh÷ng nÒn t¶ng tån t¹i cña m· cña C. Sù tæ chøc cña C++ C++ ®îc thiÕt kÕ nh lµ mét cÇu nèi gi÷a nh÷ng ngêi lËp tr×nh vµ m¸y tÝnh raw. ý tëng chÝnh lµ cho phÐp ngêi lËp tr×nh tæ chøc mét ch¬ng tr×nh theo mét c¸ch mµ hä cã thÓ dÔ dµng hÓu ®îc chóng. Ch¬ng tr×nh dÞch sau ®ã dÞch tõ ng«n ng÷ sang d¹ng mµ m¸y cã thÓ sö dông. C¸c ch¬ng tr×nh m¸y tÝnh bao gåm hai phÇn chÝnh lµ: d÷ liÖu vµ c¸c lÖnh. C¸c m¸y tÝnh t¸c ®éng mét chót hoÆc kh«ng cã sù tæ chøc(organization) trªn hai phÇn nµy. Sau cïng, c¸c m¸y tÝnh ®îc thiÕt kÕ mét c¸ch chung nhÊt cã thÓ ®îc. Mét ý tëng cho c¸c nhµ lËp tr×nh lµ t¸c ®éng lªn tæ chøc trªn m¸y tÝnh cña hä vµ kh«ng ph¶i b»ng c¸ch kh¸c. D÷ liÖu trong m¸y tÝnh ®îc chøa nh mét chuçi bao gåm c¸c byte. C+ + sö dông nh÷ng byte nµy ®Ó chøa c¸c d÷ liÖu cã Ých. C¸c kh¸i b¸o d÷ liÖu ®îc dïng bëi nh÷ng ngêi lËp tr×nh ®Ó biÓu thÞ th«ng tin mµ hä ®ang lµm viÖc. VÝ dô: int total; //Total number accounts Khai b¸o trªn yªu cÇu C++ r»ng b¹n muèn dïng mét phÇn bé nhí cña m¸y tÝnh ®Ó chøa mét sè nguyªn víi tªn lµ total. B¹n cã thÓ cho phÐp ch- ¬ng tr×nh dÞch lùa chän nh÷ng byte ®Æc biÖt nµo ®ã cña bé nhí ®Ó sö dông. BiÕn total lµ mét biÕn ®¬n gi¶n. Nã cã thÓ chØ chøa duy nhÊt mét sè nguyªn vµ miªu t¶ duy nhÊt víi mét total. Mét chuçi c¸c sè nguyªn cã thÓ ®îc tæ chøc vµo trong mét m¶ng. MÆt kh¸c, C++ sÏ kÕt nèi c¸c chi tiÕt, t¸c ®éng lªn (imposing) sù tæ chøc trªn bé nhí cña m¸y tÝnh. int balance[1001; //Balance (in cents) for all 100 accounts Cuèi cïng, cã thªm c¸c kiÓu d÷ liÖu phøc hîp. VÝ dô, mét h×nh ch÷ nhËt cã thÓ cã chiÒu réng, ®é cao, mµu vµ mÉu t«. C++ cho phÐp b¹n tæ chøc bèn thuéc tÝnh trªn vµo mét nhãm gäi lµ mét cÊu tróc (structure). struct rectangle { int width; //Width of rectangle in pixels int height; //Height of rectangle in pixels color_type color; //color of the rectangle fill-type fill; //Fill pattern };
  3. Tuy nhiªn, d÷ liÖu chØ lµ mét phÇn cña ch¬ng tr×nh, ngoµi ra b¹n cßn cÇn ®Õn c¸c lÖnh. §Õn møc ®é mµ m¸y tÝnh ®îc quan t©m, nã kh«ng biÕt mét chót g× vÒ c¸ch s¾p xÕp cña c¸c lÖnh. Nã chØ biÕt r»ng nã ®ang lµm g× víi lÖnh hiÖn t¹i vµ t¹i ®©u nã cã lÖnh kÕ tiÕp. C++ lµ mét ng«n ng÷ bËc cao, nã cho phÐp b¹n viÕt mét c©u lÖnh bËc cao nh: area = (base*height)/2.0; // Compute area of triangle Ch¬ng tr×nh dÞch dÞch lÖnh nµy vµo mét chuçi c¸c chØ dÉn (lÖnh) cña m¸y. C¸c kiÓu lÖnh nµy ®îc gäi lµ mét assignment statement. Nã ®îc sö dông ®Ó tÝnh vµ chøa c¸c gi¸ trÞ cña mét biÓu thøc sè häc. B¹n còng cã thÓ dïng control statement (lÖnh ®iÒu khiÓn) ®Ó ®iÒu khiÓn thø tù cña qu¸ tr×nh xö lý. C¸c lÖnh nh if vµ switch lµm cho m¸y tÝnh t¹o c¸c quyÕt ®Þnh d¬n gi¶n. C¸c lÖnh cã thÓ ®îc lÆp l¹i b»ng c¸ch dïng vßng lÆp nh while vµ for. C¸c nhãm cña c¸c lÖnh cã thÓ n»m trong c¸c hµm. V× vËy b¹n chØ cÇn viÕt mét hµm víi môc ®Ých chung ®Ó vÏ h×nh ch÷ nhËt vµ sau ®ã cã thÓ sö dông l¹i hµm ®ã nh÷ng n¬i mµ b¹n muèn vÏ h×nh ch÷ nhËt. C+ + cung cÊp mét bé phong phó c¸c hµm tiªu chuÈn (standard function) nh÷ng hµm mµ thùc hiÖn c¸c chøc n¨ng th«ng thêng nh t×m kiÕm (searching), ph©n lo¹i (sorting), nhËp vµo (input), vµ ®a ra (output). Mét bé c¸c hµm quan hÖ cã thÓ ®îc nhãm víi nhau ®Ó t¹o ra c¸c modul, vµ c¸c modul ®îc nèi víi nhau t¹o thµnh c¸c ch¬ng tr×nh. Mét trong nh÷ng môc tiªu chÝnh cña ng«n nh÷ C++ lµ tæ chøc c¸c lÖnh hîp thµnh c¸c phÇn ®Ó cã thÓ sö dông l¹i ®îc. Cuèi cïng, b¹n cã thÓ viÕt mét ch¬ng tr×nh nhanh h¬n nÕu b¹n “mîn” hÇu hÕt c¸c m· cña b¹n ë mét n¬i nµo ®ã kh¸c. Nhãm c¸c modul cã kh¶ n¨ng dïng l¹i cã thÓ kÕt hîp vµo trong mét th viÖn. VÝ dô, nÕu b¹n cÇn mét bé s¾p xÕp th«ng thêng, b¹n cã thÓ dïng c¸c hµm chøc n¨ng qsort tõ th viÖn vµ liªn kÕt nã víi ch¬ng tr×nh cña b¹n. Mét m¸y tÝnh chia thÕ giíi thµnh d÷ liÖu vµ c¸c lÖnh. Trong c¶ mét thêi gian dµi, c¸c ng«n ng÷ bËc cao nh C vÉn gi÷ nguyªn c¸ch ph©n chia nµy. Trong ng«n ng÷ C, b¹n cã thÓ ®Þnh nghÜa d÷ liÖu hoÆc viÕt c¸c lÖnh nhng kh«ng thÓ kÕt hîp c¶ hai. Mét sù c¶i tiÕn chÝnh trong C++ lµ ý tëng kÕt hîp d÷ liÖu vµ lÖnh l¹i víi nhau trong mét cÊu tróc gäi lµ líp (class) hoÆc ®èi tîng (object). LËp tr×nh híng ®èi tîng cho phÐp nhãm d÷ liÖu víi c¸c lÖnh thao t¸c trªn d÷ liÖu ®ã. Kh¸i niÖm nµy ®îc n©ng lªn mét bíc n÷a trong C++: nã cho phÐp ta nhËn ®îc c¸c class míi tõ nh÷ng c¸i ®· tån t¹i. §Æc ®iÓm cuèi nµy lµ mét tÝnh n¨ng rÊt m¹nh. Nã cho phÐp b¹n x©y dùng c¸c class phøc t¹p tõ nh÷ng class ®¬n gi¶n h¬n, nhá h¬n. Nã còng cho phÐp b¹n ®Þnh nghÜa mét class tr×u tîng (abstract), c¬ b¶n vµ sau ®ã t¹o ra (derive) c¸c class chi tiÕt h¬n tõ c¸c class ban ®Çu. VÝ
  4. dô, mét class tr×u tîng vÒ h×nh d¹ng cã thÓ ®îc dïng ®Ó ®Þnh nghÜa c¸c h×nh d¹ng nh: h×nh ch÷ nhËt, tam gi¸c, h×nh trßn. Tæ chøc (organization) lµ mét mÊu chèt ®Ó viÕt c¸c ch¬ng tr×nh hoµn h¶o. Nh trong cuèn s¸ch nµy, b¹n biÕt r»ng b¶ng néi dung ë ®»ng tríc, b¶ng môc lôc ë ®»ng sau, nã lµ mét c¸ch mµ c¸c quyÓn s¸ch ®îc tæ chøc. Tæ chøc lµm cho quyÓn s¸ch nµy sö dông ®îc dÔ h¬n. Ng«n ng÷ C++ cho phÐp b¹n tæ chøc c¸c ch¬ng tr×nh cña m×nh dïng có ph¸p (syntax) ®¬n gi¶n mµ hiÖu qu¶. Cuèn s¸ch nµy sÏ ®i s©u vµo có ph¸p cña C++ vµ híng dÉn b¹n ®Þnh kiÓu c¸c quy t¾c ®Ó t¹o c¸c ch¬ng tr×nh tin cËy vµ dÔ ®äc. B»ng c¸ch kÕt hîp mét có ph¸p hiÖu qu¶ víi kiÓu (style) lËp tr×nh tèt b¹n cã thÓ t¹o nh÷ng ch¬ng tr×nh m¹nh thùc hÖn c¸c phÐp to¸n phøc t¹p. C¸ch häc ng«n ng÷ C++ ChØ cã duy nhÊt mét c¸ch häc viÕt ch¬ng tr×nh lµ ph¶i viÕt c¸c ch- ¬ng tr×nh. B¹n sÏ häc ®îc rÊt nhiÒu b»ng c¸ch viÕt vµ gì rèi (debugging) c¸c ch¬ng tr×nh h¬n lµ khi mµ b¹n ®· ®äc song cuèn s¸ch nµy (than you ever will by reading this book). Cuèn s¸ch nµy bao gåm nhiÒu bµi tËp vÒ lËp tr×nh, vµ b¹n cè g¾ng lµm ®îc cµng nhiÒu trong sè chóng cµng tèt. Khi lµm c¸c bµi tËp b¹n ph¶i lu«n nghÜ ®Õn kiÓu ch¬ng tr×nh hoµn h¶o nhÊt, ph¶i lu«n lu«n chó thÝch (comment) c¸c ch¬ng tr×nh cña b¹n, thËm chÝ c¶ khi b¹n ®ang lµm bµi tËp ®ã cho riªng m×nh. Sù chó thÝch gióp b¹n tæ chøc c¸c ý tëng cña m×nh, vµ chó thÝch c¸c ch¬ng tr×nh cña b¹n lµ mét c¸ch luyÖnn tËp t«t nhÊt khi b¹n ®i vµo thùc tÕ (“real world”). B¹n h·y ®õng nghÜ r»ng, “T«i chØ viÕt nh÷ng ch¬ng tr×nh nµy cho riªng m×nh, v× vËy t«i kh«ng cÇn chó thÝch chóng.” Tríc tiªn, nh÷ng m· mµ b¹n thÊy rÊt râ rµng khi viÕt, nã cã thÓ thêng rÊt rèi vµ khã hiÓu khi b¹n xem l¹i mét tuÇn sau ®ã. ViÕt c¸c c©u chó thÝch, nã cßn gióp b¹n tæ chøc c¸c ý tëng cña m×nh (Nõu b¹n cã thÓ viÕt ra mét ý tëng b»ng tiÕng Anh, th× b¹n míi chØ hoµn thµnh mét nöa c«ng viÖc viÕt nã b»ng C++) Cuèi cïng, c¸c ch¬ng tr×nh cã xu híng xa h¬n lµ chóng ta mong ®îi. Mét lÇn t«i viÕt mét ch¬ng tr×nh ®îc thiÕt kÕ chØ lµm viÖc duy nhÊt trªn mét m¸y tÝnh t¹i Caltech. Ch¬ng tr×nh phô thuéc vµo hÖ thèng rÊt cao. Bëi v× t«i lµ ngêi duy nhÊt sÏ dïng ch¬ng tr×nh, ch¬ng tr×nh sÏ in ra mét th«ng b¸o theo sau nÕu t«i cã mét dßng lÖnh sai: ?LSTUIT User is a twit Vµi n¨m sau ®ã t«i lµ mét sinh viªn t¹i trêng ®¹i häc Syracuse. Ngêi th ký t¹i trêng Computer Science cÇn mét ch¬ng tr×nh t¬ng tù nh ch¬ng tr×nh danh s¸ch cña t«i ë Caltech, v× vËy t«i söa ch¬ng tr×nh cña t«i cho c« ta. ThËt kh«ng may, t«i ®· quªn c¸i th«ng b¸o lçi nhá bÐ buån cêi ®ã cña t«i.
  5. Tëng tîng r»ng nã sÏ khñng khiÕp nh thÕ nµo khi t«i bíc vµo v¨n phßng cña Computer Science vµ bÞ hái bëi ngêi th ký trëng. Ngêi ®µn bµ nµy cã nhiÒu quyÒn lùc ®Õn møc mµ bµ ta cã thÓ lµm cho trëng khoa ph¶i kÝnh nÓ. C« ta nh×n t«i vµ nãi, “Ngêi sö dông lµ ®Çn, h¶? (User is a twit, huh?)” RÊt may m¾n lµ c« ta cã tÝnh hµi híc, hoÆc ngµy nay t«i kh«ng ë ®©y n÷a. R¶i r¾c suèt cuèn s¸ch nµy lµ c¸c ch¬ng tr×nh bÞ “®øt qu·ng” (“broken”), vµ bá thêi gian ®Ó t×m ra t¹i sao chóng kh«ng lµm viÖc. Th«ng thêng nh÷ng vÊn ®Ò nµy rÊt ®¬n gi¶n nh dÊu chÊm phÈy kh«ng ®óng chç, hoÆc dïng = thay cho ==. Nh÷ng ch¬ng tr×nh nµy gióp b¹n häc c¸ch t×m c¸c lçi ë c¸c ch¬ng tr×nh nhá, tõ ®ã b¹n lµm t¬ng tù ë c¸c ch¬ng tr×nh lín, vµ b¹n sÏ t¹o c¸c lçi, ®îc luyÖn tËp ®Ó t×m chóng.
  6. Ch¬ng 2 C¸c m¸y tÝnh lµ c¸c c«ng cô mµ cã thÓ chøa, tæ chøc vµ xö lý mét l- îng lín th«ng tin. Tuy nhiªn chóng kh«ng thÓ lµm ®îc bÊt cø c¸i g× khi mµ ai ®ã cha ®a cho chóng nh÷ng lÖnh chi tiÕt. Th«ng tin víi c¸c m¸y tÝnh kh«ng dÔ dµng. Nã yªu cÇu c¸c lÖnh chÝnh x¸c vµ chi tiÕt. Cuéc sèng cã dÔ dµng h¬n kh«ng nÕu chóng ta cã thÓ viÕt ch¬ng tr×nh b»ng tiÕng Anh? TiÕp theo chóng ta yªu cÇu m¸y tÝnh, “Thªm vµo tÊt c¶ c¸c kiÓm tra vµ c¸c deposit cña t«i vµ nãi víi t«i toµn bé,” vµ m¸y sÏ c©n b»ng (balancce) c¸c kiÓm tra cña chóng ta (checkbook). Nhng tiªng Anh lµ mét ng«n ng÷ rÊt h¹n chÕ nÕu b¹n ph¶i viÕt c¸c c©u lÖnh chÝnh x¸c. Ng«n ng÷ hoµn toµn kh«ng râ nghÜa vµ kh«ng chÝnh x¸c. Grace Hopper, mét bµ næi tiÕng vÒ tÝnh to¸n (computing), mét lÇn b×nh luËn vÒ c¸c chØ dÉn ë hép dÇu géi ®Çu: Wash (géi) Rinse (géi qua) Repeat (lÆp l¹i) Bµ ta cè g¾ng theo sù chØ dÉn, nhng ®· ®ïng hÕt hép dÇu (Wash-rinse-repeat. Wash-rinse-repeat. Wash-rinse-repeat....). TÊt nhiªn chóng ta sÏ cè g¾ng viÕt b»ng tiÕng Anh râ rµng. Chóng ta ph¶i rÊt cÈn thËn vµ ch¾c ch¾n ®Ó ®¸nh vÇn râ rµng mäi thø vµ ch¾c ch¾n tÝnh ®Õn c¸c lÖnh (chØ dÉn) cho mäi trêng hîp x¶y ra. NÕu chóng ta lµm viÖc cËt lùc, chóng ta cã thÓ viÕt c¸c lÖnh tiÕng Anh chÝnh x¸c, ®óng kh«ng? ChÝnh v× vËy, cã mét nhãm ngêi tËp trung thêi gian cè g¾ng viÕt tiÕng Anh chÝnh x¸c. Hä ®îc gäi lµ chÝnh phñ, vµ c¸c v¨n b¶n hä viÕt ®- îc gäi lµ quy ®Þnh cña chÝnh phñ. Mét c¸ch ®¸ng tiÕc, trong sù cè g¾ng ®Ó lµm cho c¸c quy ®Þnh chÝnh x¸c, chÝnh phñ ®· lµm cho c¸c v¨n b¶n hÇu hÕt rÊt khã ®äc. NÕu b¹n ®· tõng ®äc quyÓn híng dÉn kÌm theo víi biÓu thuÕ cña b¹n, th× b¹n sÏ thÊy ®îc tiÕng Anh chÝnh x¸c sÏ nh thÕ nµo. ThËm chÝ, ngay c¶ víi nh÷ng phô tõ kh«ng cÇn thiÕt mµ chÝnh phñ thªm vµo th× c¸c vÊn ®Ò cã thÓ x¶y ra. Mét vµi n¨m tríc ®©y, California th«ng qua ®iÒu luËt yªu cÇu tÊt c¶ nh÷ng ngêi ®i xe m¸y ph¶i ®eo mò b¶o hiÓm. Ngay sau ®ã ®iÒu luËt nµy cã hiÖu lùc, mét c¶nh s¸t dõng mét ngêi kh«ng ®eo mò b¶o hiÓm l¹i, ngêi ®µn «ng ®Ò nghÞ c¶nh s¸t xem kü h¬n ®iÒu luËt. §iÒu luËt cã hai ®iÓm: 1) Ngêi ®i xe m¸y ph¶i cã mò b¶o hiÓm ®îc x¸c nhËn lµ chèng ®îc va ch¹m vµ 2) Nã ph¶i ®îc thÝt mét c¸ch ch¾c ch¾n. Ngêi c¶nh s¸t kh«ng thÓ ph¹t anh ta khi mµ anh ta cã mang mò vµ thÝt ch¾c ch¾n vµo ®Çu gèi.
  7. V× nh÷ng vÊn ®Ò h¹n chÕ ®ã cña tiÕng Anh, nªn nã kh«ng thÓ trë thµnh mét ng«n ng÷ m¸y tÝnh ®îc. VËy b©y giê chóng ta sÏ trao ®æi th«ng tin víi m¸y tÝnh nh thÕ nµo? C¸c m¸y tÝnh ®Çu tiªn trÞ gi¸ hµng triÖu dollar, trong khi cïng thêi gian ®ã th× l¬ng cña mét ngêi lËp tr×nh thµnh th¹o (good) lµ 15,000 dollar mét n¨m. C¸c nhµ lËp tr×nh b¾t buéc ph¶i viÕt ch¬ng tr×nh b»ng mét ng«n ng÷ mµ tÊt c¶ c¸c lÖnh ®îc chuyÓn thµnh chuçi c¸c con sè, gäi lµ ng«n ng÷ m¸y. Ng«n ng÷ nµy cã thÓ ®a trùc tiÕp vµo trong m¸y tÝnh. Mét kiÓu ch¬ng tr×nh ng«n ng÷ m¸y cã d¹ng nh sau: 1010 1111 0011 0111 0111 0110 … vµ tiÕp tôc nh vËy cho hµng tr¨m lÖnh. Trong khi m¸y “nghÜ” víi c¸c con sè mµ con ngêi kh«ng thÓ. §Ó lËp tr×nh víi c¸c m¸y tÝnh cæ nµy, c¸c kü s phÇn mÒm ®· ph¶i viÕt ra nh÷ng ch¬ng tr×nh cña hä, sö dông mét ng«n ng÷ ®¬n gi¶n, mét ng«n ng÷ mµ mçi tõ sÏ ®Æc trng (stand for) cho mét lÖnh ®¬n. Nã ®îc gäi lµ ng«n ng÷ assembly, bëi v× nh÷ng ngêi lËp tr×nh ph¶i dÞch b»ng tay, hoÆc tæ hîp (assemble) mçi dßng ra m· m¸y. Mét kiÓu ch¬ng tr×nh ng«n ng÷ assembly cã thÓ gièng nh sau: Program Translation MOV A,47 1010 1111 ADD A,B 0011 0111 HALT 0111 0110 … vµ tiÕp tôc nh vËy cho hµng tr¨n lÖnh. Qu¸ tr×nh nµy ®îc minh ho¹ b»ng h×nh 2.1. Assembl Assembly Machine y (translation) Language language Program MOV A,47 1010 1111 MOV A,47 1010 1111 ADD A,B 0011 0111 ADD A,B 0011 0111 HALT 0111 0110 HALT 0111 0110 … … H×nh 2-1.
  8. Qu¸ tr×nh dÞch lµ mét nhiÖm vô buån tÎ vµ ch¸n ng¾t, nã ®ßi hái ph¶i kiªn tr×. Mét kü s phÇn mÒm ®· xÐt thÊy ®©y lµ c«ng viÖc hoµn chØnh cho mét m¸y tÝnh, v× vËy anh ta viÕt mét ch¬ng tr×nh thùc hiÖn c«ng viÖc nµy mét c¸ch tù ®éng, nã ®îc gäi lµ assambler. Anh ta tr×nh bµy s¸ng t¹o míi nµy lªn «ng chñ vµ ngay lËp tøc bÞ ca cÈm “Anh d¸m nghÜ ngay c¶ viÖc sö dông mét chiÕc m¸y ®¾t nh vËy cho mét nhiÖm vô thuéc v¨n phßng?” §a ra trÞ gi¸ thêi gian mét tiÕng cña m¸y tÝnh ®Ó ®æi l¹i trÞ gi¸ thêi gian mét tiÕng cña ngêi lËp tr×nh, ®iÒu nµy kh«ng ph¶i lµ mét quan ®iÓm kh«ng cã lý. May thay, thêi gian qua ®i th× gi¸ trÞ cña ngêi lËp tr×nh ®îc t¨ng lªn vµ gi¸ trÞ cña m¸y tÝnh gi¶m ®i. V× vËy nã sÏ mang l¹i hiÖu qu¶ h¬n khi c¸c nhµ lËp tr×nh viÕt c¸c ch¬ng tr×nh b»ng ng«n ng÷ assembly vµ sö dông mét ch¬ng tr×nh gäi lµ assembler ®Ó dÞch ch¬ng tr×nh ®ã ra ng«n ng÷ m¸y. Ng«n ng÷ assembly tæ chøc ch¬ng tr×nh theo mét c¸ch mµ c¸c ngêi lËp tr×nh dÔ hiÓu h¬n. Tuy nhiªn, m¸y sÏ khã kh¨n h¬n khi sö dông ch- ¬ng tr×nh nµy. Ch¬ng tr×nh ph¶i ®îc dÞch tríc khi m¸y cã thÓ thùc hiÖn chóng. §©y lµ sù khëi ®Çu cho mét xu híng. C¸c ng«n ng÷ lËp tr×nh ngµy cµng trë lªn thuËn tiÖn h¬n cho nh÷ng ngêi lËp tr×nh sö dông vµ nã còng b¾t ®Çu yªu cÇu ngµy cµng nhiÒu thêi gian cña m¸y tÝnh ®Ó dÞch chóng ra d¹ng mµ c¸c m¸y tÝnh cã thÓ sö dông. Qua hµng n¨m c¸c ng«n ng÷ bËc cao ®· ®îc ph¸t minh ra. Nh÷ng ng«n ng÷ nµy cè g¾ng ®Ó cho nh÷ng ngêi lËp tr×nh viÕt ra nh÷ng ch- ¬ng tr×nh mµ hä dÔ dµng hiÓu ®îc vµ nã còng ®ñ râ rµng vµ ®¬n gi¶n ®Ó c¸c m¸y tÝnh cã thÓ hiÓu. C¸c ng«n ng÷ bËc cao ban ®Çu ®îc thiÕt kÕ ®Ó xö lý (handle) c¸c kiÓu ®Æc trng cña c¸c øng dông. FORTRAN ®îc thiÕt kÕ dïng cho kü thuËt, COBOL, ®Ó viÕt c¸c b¸o c¸o th¬ng m¹i, vµ PASCAL dïng cho sinh viªn. (Sè lín trong nh÷ng ng«n ng÷ nµy ph¸t triÓn lín h¬n lµ khi nã ®îc sö dông ban ®Çu. Nh cã ®ån ®¹i r»ng Nicklaus Wirth ®· nãi, “NÕu t«i biÕt r»ng PASCAL trë lªn thµnh c«ng nh vËy, th× t«i ®· cÈn thËn h¬n khi thiÕt kÕ chóng.”) Sau ®ã, Brian Kemighan vµ Dennis Ritchie ph¸t triÓn ng«n ng÷ C vµ Bjarne Stroustrup chuyÓn nã thµnh C++. C¸c ch¬ng tr×nh tõ kh¸i niÖm ®Õn thùc hiÖn C¸c ch¬ng tr×nh C++ ®îc viÕt b»ng ng«n ng÷ bËc cao sö dông c¸c ch÷ c¸i, c¸c ch÷ sè, vµ c¸c biÓu tîng kh¸c mµ b¹n thÊy trªn bµn phÝm. Trªn thùc tÕ m¸y tÝnh thùc hiÖn mét ng«n ng÷ bËc rÊt thÊp gäi lµ macbine code (mét chuçi c¸c con sè). V× vËy, tríc khi mét ch¬ng tr×nh cã thÓ ®îc sö dông, nã ph¶i qua mét vµi sù biÕn ®æi. C¸c ch¬ng tr×nh ®îc xuÊt ph¸t nh lµ mét ý tëng trong ®Çu cña nhµ lËp tr×nh. Anh ta viÕt nh÷ng ý tëng cña m×nh b»ng mét tr×nh so¹n th¶o (text editor) trong mét file gäi lµ file nguån (sourcefile) hoÆc m· nguån (source code). File nµy ®îc biÕn ®æi b»ng mét tr×nh biªn dÞch
  9. (compiler) ra mét file ®èi tîng (objectfile). TiÕp theo mét ch¬ng tr×nh gäi lµ tr×nh liªn kÕt (linker) ®a c¸c file ®èi tîng nµy, kÕt hîp nã víi c¸c thñ tôc ®îc ®Þnh nghÜa tríc tõ th viÖn tiªu chuÈn (standard library), vµ t¹o mét ch¬ng tr×nh cã thÓ thùc hiÖn ®îc (mét bé c¸c lÖnh cña ng«n ng÷ m¸y). Trong c¸c phÇn tiÕp theo, b¹n sÏ thÊy ®îc nh÷ng d¹ng kh¸c nhau lµm viÖc víi nhau ®Ó t¹o mét ch¬ng tr×nh cuèi cïng. H×nh 2-2 ®a ra nh÷ng bíc mµ b¾t buéc ph¶i thùc hiÖn ®Ó chuyÓn ®æi mét ch¬ng tr×nh viÕt b»ng ng«n ng÷ bËc cao ra mét ch¬ng tr×nh mµ cã thÓ thùc hiÖn ®îc. M· bËc cao Tr× biªn nh dÞch Ch­¬ tr× ng nh ng«n ng÷ assembly Assembler Th­ viÖn M· ® t­îng èi Tr× liªn nh kÕt Ch­¬ tr× cã ng nh kh¶ n¨ng thùc hiÖn H×nh 2-2. Sù chuyÓn ®æi cña mét ng«n ng÷ bËc cao ra ch¬ng tr×nh Wrappers RÊt may m¾n lµ b¹n kh«ng ph¶i ch¹y b¶n th©n ch¬ng tr×nh biªn dÞch, assembler, tr×nh liªn kÕt. HÇu hÕt c¸c tr×nh biªn dÞch C++ dïng
  10. c¸c ch¬ng tr×nh “wrapper”, ch¬ng tr×nh mµ x¸c ®Þnh nh÷ng c«ng cô nµo cÇn thiÕt ®Ó ch¹y nèi tiÕp nhau. Mét sè hÖ thèng lËp tr×nh thËm chÝ cßn ®i xa h¬n vµ cung cÊp cho nh÷ng ngêi lËp tr×nh mét m«i trêng ph¸t triÓn khÐp kÝn (IDE- integrated development environment). IDE bao gåm mét tr×nh so¹n th¶o, tr×nh biªn dÞch, tr×nh liªn kÕt qu¶n lý project, tr×nh gì rèi and more in one convenient package. C¶ Borland vµ Microsoft cïng cung cÊp c¸c IDE víi c¸c tr×nh biªn dÞch cña hä. T¹o mét ch¬ng tr×nh thùc sù Tríc khi b¹n thùc sù b¾t ®Çu t¹o c¸c ch¬ng tr×nh cña m×nh, b¹n cÇn thiÕt ph¶i biÕt c¸c c«ng cô lËp tr×nh c¬ b¶n. PhÇn nµy sÏ gióp b¹n tõng bíc thùc hiÖn gâ vµo, biªn dÞch, vµ ch¹y mét ch¬ng tr×nh ®¬n gi¶n. Nã tr×nh bµy c¸ch sö dông hai kiÓu tr×nh biªn dÞch kh¸c nhau. KiÓu thø nhÊt lµ ®éc lËp (standalone) hoÆc tr×nh biªn dÞch gâ dßng lÖnh (command-line compiler). KiÓu tr×nh biªn dÞch nµy ®îc khÐp kÝn trong mét chÕ ®é xö lý theo l« (batch mode) tõ dßng lÖnh. Nãi mét c¸ch kh¸c, b¹n gâ mét lÖnh vµ tr×nh biªn dÞch chuyÓn tõ m· nguån cña b¹n thµnh mét ch¬ng tr×nh cã thÓ thùc hiÖn ®îc. Mét kiÓu tr×nh biªn dÞch kh¸c ®- îc chøa trong mét IDE. HÇu hÕt c¸c hÖ thèng UNIX dïng c¸c tr×nh biªn dÞch gâ dßng lÖnh. Mét vµi tr×nh biªn dÞch kiÓu IDE s½n cã cho UNIX, nhng nã rÊt Ýt. MÆt kh¸c, hÇu hÕt c¸c tr×nh biªn dÞch sö dông víi MS-Dos vµ Windows chøa mét m«i trêng ph¸t triÓn khÐp kÝn. For command-line die-hards, these compilers do contain command-line compilers as well. T¹o mét ch¬ng tr×nh dïng mét tr×nh biªn dÞch dßng lÖnh Trong phÇn nµy b¹n sÏ xem xÐt kü tõng bíc mét qu¸ tr×nh cÇn thiÕt ®Ó t¹o mét ch¬ng tr×nh dïng mét tr×nh biªn dÞch dßng lÖnh. ChØ dÉn ®îc ®a ra cho sö dông mét mét tr×nh biªn dÞch UNIX chung, tr×nh biªn dÞch Free Software Foundation's g++, Turbo-C++, Borland C++, vµ Microsoft Visual C++. Tuy nhiªn, nÕu b¹n ®ang sö dông mét ch¬ng tr×nh dÞch Borland hoÆc Microsoft b¹n cã thÓ muèn nh¶y ®Õn ®o¹n dïng IDE However, if you are using a Borland or Microsoft compiler, you might want to skip ahead to the section on using the IDE. Bíc 1: Nã rÊt dÔ dµng qu¶n lý nÕu b¹n t¹o mét th môc riªng cho mçi ch¬ng tr×nh mµ b¹n ®ang lµm viÖc. Trong trêng hîp nµy b¹n sÏ t¹o mét th môc hello ®Ó chøa ch¬ng tr×nh hello cña b¹n. Trong UNIX:
  11. % mkdir hello % cd hello Trong MS-DOS: C: MKDIR HELLO C: CD HELLO Bíc 2: t¹o ch¬ng tr×nh Mét ch¬ng tr×nh khëi ®Çu nh mét file v¨n b¶n. VÝ dô 2-1 lµ ch¬ng tr×nh hello d¹ng nguån #include int main() { cout
  12. information on how to get their software.) Among their offerings is a C++ compiler called g++. §Ó dÞch mét ch¬ng tr×nh dïng tr×nh biªn dÞch g++, dïng dßng lÖnh sau: % g++ -g -Wall -ohello hello.cc Thªm vµo thay ®æi -Wall bËt lªn tÊt c¶ c¸c c¶nh b¸o. Borland's Turbo C++ in MS-DOS H·ng quèc tÕ Borland t¹o mét tr×nh biªn dÞch low-cost MA-DOS C+ + gäi lµ Turbo-C++. Tr×nh biªn dÞch nµy rÊt lý tëng ®Ó häc. Dßng lÖnh cho Turbo-C++ lµ: C:> tcc -ml -v -N -P -w -ehello hello.cpp Th«ng sè –ml yªu cÇu Turbo-C++ ®Ó dïng m« h×nh bé nhí réng. (M¸y PC nµy cã rÊt nhiÒu m« h×nh bé nhí kh¸c nhau cã thÓ ®îc dïng khi t¹o c¸c ch¬ng tr×nh. Cuèn s¸ch nµy sÏ kh«ng nãi vÒ nh÷ng bé nhí nµy. Thay v× thÕ, chóng ta cã quan ®iÓm, “Sö dông m« h×nh bé nhí réng vµ kh«ng ph¶i lo nghÜ g× cho ®Õn khi b¹n trë thµnh chuyªn gia lËp tr×nh.”) Thay ®æi –v nãi víi Turbo-C ®a th«ng tin gì rèi vµo ch¬ng tr×nh. C¶nh b¸o ®îc bËt lªn víi –w, kiÓm tra ng¨n xÕp b»ng –N. Trªn thùc tÕ tr×nh biªn dÞch sÏ dÞch c¶ C vµ C++.. We force a C++ compile using the -P switch. Cuèi cïng, -ehello nãi víi Turbo-C++ ®Ó t¹o mét ch¬ng tr×nh cã tªn lµ hello, vµ hello.ccp lµ tªn cña file nguån. Xem sæ tay tham kh¶o Turbo-C++ ®Ó cã danh s¸ch hoµn chØnh c¸c lùa chän. Borland C++ in MS-DOS and Window Cïng víi Turbo-C++, h·ng quèc tÕ Borland còng t¹o mét tr×nh biªn dÞch chuyªn gia hoµn h¶o cho MS-DOS/Windows gäi lµ Borland C++. Dßng lÖnh cña nã lµ: C:> bcc -ml -v -N -P -w -ehello hello.cpp C¸c lùa chän dßng lÖnh trong Turbo-C++ vµ Borland C++ lµ gièng nhau. Microsoft Visual C++ Microsoft Visual C++ lµ mét tr×nh biªn dÞch kh¸c cho MS- DOS/Windows. Nã kh«ng m¹nh vµ hoµn h¶o nh lµ b¶n t¬ng øng Borland cña nã. Nhng nã sÏ dÞch hÇu hÕt c¸c ch¬ng tr×nh trong cuèn s¸ch nµy (Version 1.5 fails to handle templates and exceptions.) . §Ó dÞch, dïng dßng lÖnh sau: C:> cl /AL /Zi /Wl hello.cpp Chän /AL yªu cÇu m¸y tÝnh dïng m« h×nh bé nhí réng. Gì rèi ®îc bËt lªn víi lùa chän /Zi vµ c¶nh b¸o víi lùa chän /W1. Bíc 4: thùc hiÖn ch¬ng tr×nh B©y giê, khi b¹n ch¹y ch¬ng tr×nh, vÝ dô nh: hello
  13. T¹i dÊu nh¾c cña UNIX hoÆc MS-DOS, dßng th«ng b¸o sau xuÊt hiÖn trªn mµn h×nh: Hello World T¹o mét ch¬ng tr×nh dïng mét m«i trêng tæ hîp khÐp kÝn C¸c méi trêng tæ hîp khÐp kÝn provide a one-stop shop when it comes to programming. Chóng cung cÊp mét tr×nh biªn dÞch, tr×nh so¹n th¶o, tr×nh gì rèi vµ kÕt hîp chóng trong mét khèi ng¨n l¾p cho nhµ lËp tr×nh. Since development environments tend to change, the particular version you use may require slightly different keystrokes. Bíc 1: Nã rÊt dÔ dµng qu¶n lý nÕu b¹n t¹o mét th môc riªng cho mçi ch¬ng tr×nh mµ b¹n ®ang lµm viÖc. Trong trêng hîp nµy b¹n sÏ t¹o mét th môc HELLO ®Ó chøa ch¬ng tr×nh hello cña b¹n. Trong MS-DOS C: MKDIR HELLO C: CD HELLO Bíc 2: gâ, dÞch vµ ch¹y ch¬ng tr×nh cña b¹n Mçi IDE kh¸c nhau mét chót, v× vËy chóng ta xÐt ®Õn c¸c lÖnh riªng biÖt cho mçi lo¹i: Turbo-C++ 1. khëi ®éng Turbo-C IDE víi dßng lÖnh: C: TC 2. Dïng c¸c lÖnh Options/Compiler/Code Generation ®Ó lÊy ra hép héi tho¹i Code Generation, nh trªn h×nh 2-3. §æi m« h×nh nhí (model memory) vÒ d¹ng réng. 3. Dïng c¸c lÖnh Option/Compiler Entry/Exit ®Ó bËt kiÓm tra ng¨n xÕp, nh trong h×nh 2-4.
  14. H×nh 2-3. Hép héi tho¹i Code Generation H×nh 2-4. Hép héi tho¹i Entry/Exit Code Generation 4. Sö dông lÖnh Option/Compiler/Messages/Display ®Ó hiÖn ra hép héi tho¹i Compiler Messages nh ë h×nh 2-5. Chän All ®Ó hiÖn lªn tÊt c¶ c¸c c¶nh b¸o. 5. Sö dông lÖnh Option/Save ®Ó nghi tÊt c¶ c¸c lùa chän b¹n ®· dïng. H×nh 2-5. Hép héi tho¹i Conpiler Messages
  15. 6. Dïng hép héi tho¹i Open Project File ®Ó chän mét file project. Trong trêng hîp nµy, file project cña b¹n cã tªn lµ HELLO.PRJ. Mµn h×nh nªn cã d¹ng gièng nh h×nh 2-6 khi b¹n kÕt thóc. H×nh 2-6. Hép héi tho¹i Open Project File 7. NhÊn phÝm Insert ®Ó céng mét file vµo project. File mµ b¹n muèn céng lµ HELLO.CCP nh trªn h×nh 2-7. H×nh 2-7. Hép héi tho¹i Add to Project List 8. NhÊn ESC ®Ó tho¸t ra kho¶i vßng “céng file”. 9. NhÊn phÝm mòi lªn ®Ó nhÈy qua mét dßng. Dßng víi hello.cpp b©y giê ®îc s¸ng lªn nh h×nh 2-8.
  16. H×nh 2-8. "Hello" project 10. NhÊn Return ®Ó so¹n th¶o file nµy. 11. Gâ vµo nh÷ng m· sau: # include int main() { cout
  17. 13. Sau khi ch¬n tr×nh ch¹y, ®iÒu khiÓn quay vÒ IDE. §iÒu nµy cã nghÜa lµ b¹n kh«ng thÓ xem kÕt qu¶ ch¬ng tr×nh cña m×nh. §Ó xem nã b¹n ph¶i chuyÓn vÒ mµn h×nh ngêi sö dông b»ng c¸ch sö dông lÖnh Windows/User. NhÊn mét phÝm bÊt kú nã sÏ tr¶ b¹n vÒ mµn h×nh IDE. H×nh 2-10 hiÓn thÞ kÕt qu¶ ®a ra cña ch¬ng tr×nh. 14. Khi kÕt thóc, b¹n cã thÓ ghi ch¬ng tr×nh cña m×nh víi lÖnh File/Save. 15. §Ó tho¸t khái IDE, dïng lÖnh File/Quit. H×nh 2-10. User screen Borland C++ 1. T¹o mét th môc HELLO ®Ó chøa c¸c file cho ch¬ng tr×nh hello cña chóng ta. B¹n cã thÓ t¹o th môc b»ng c¸ch sö dông ch¬ng tr×nh qu¶n lý file cña Windows hoÆc gâ dßng lÖnh sau t¹i dÊu nh¾c cña MS-DOS: mkdir\HELLO 2. Tõ Windows, nh¸y kÐp vµo biÓu tîng Borland C++ ®Ó khëi ®éng IDE. Ch¬ng tr×nh b¾t ®Çu ®îc thùc hiÖn vµ hiÓn thÞ mét kh«ng gian lµm viÖc trèng nh trong h×nh 2-11. 3. Chon môc Project/New Project ®Ó t¹o mét project cho ch¬ng tr×nh cña chóng ta. §iÒn vµo « trèng "Project Pathand Name:" víi c:\hello\hello.ide. … 4. NhÊn nót Advanced ®Ó hiÓn thÞ héi tho¹i Advanced Options. Xo¸ c¸c môc .rc vµ .def nh hiÓn thÞ trong h×nh 2-13. 5. NhÊn nót OK ®Ó quay vÒ héi tho¹i New Target. 6. NhÊn Alt-F10 ®Ó hiÓn thÞ menu phô nh trong h×nh 2-14.
  18. 7. Chän Edit Node Attributes ®Ó hiÓn thÞ héi tho¹i nh trong h×nh 2- 15. Trong « trèng Style Sheet, chän môc "Debug Info and Diagnostics." NhÊn OK ®Ó trë l¹i cöa sæ chÝnh. H×nh 2-11. Mµn h×nh chÝnh cña Borland C++ H×nh 2-12. Hép héi tho¹i New Target
  19. H×nh 2-13. Hép héi tho¹i Advenced Options H×nh 2-14. Menu phô Target Options
  20. H×nh 2-15. Hép héi tho¹i Node Attributes 8. Vµo phÇn héi tho¹i Project Optiãn b»ng c¸ch chän môc Options/Project Options. NhÈy xuèng môc Compiler vµ nhÊn lªn dÊu "+" ®Ó më réng c¸c môc chän. Quay vÒ phÇn chän kiÓm tra trµn « nhí nh trong h×nh 2-16. NhÊn OK ®Ó ghi c¸c lùa chän nµy. 9. Chän OK ®Ó quay vÒ cöa sæ chÝnh. NhÊn phÝm mòi tªn xuèng ®Ó chän môc hello[.cpp] trong project (xem trong h×nh 2-17). 10. NhÊn Return ®Ó b¾t ®Çu so¹n th¶o file hello.cpp. Gâ c¸c m· díi ®©y: # include int main() { cout