å‰è¨€ 一〠为什么编写这本书 毋庸置疑,C++è¯è¨€æ˜¯å½“å‰éžå¸¸æµè¡Œçš„é¢å‘对象程åºè®¾è®¡è¯è¨€,å„高ç‰é™¢æ ¡çš„计算机专业都开设了C++è¯è¨€è¯¾ç¨‹,作为é¢å‘对象程åºè®¾è®¡çš„入门课程,æœ‰äº›å¦æ ¡ç”šè‡³æŠŠC++è¯è¨€è¯¾ç¨‹ä½œä¸ºéžè®¡ç®—机专业å¦ç”Ÿçš„公共课。 然而,ä¸å¯å¦è®¤çš„æ˜¯ï¼ŒC++è¯è¨€è¯æ³•夿‚,想è¦è½»æ¾å¦ä¹ 并熟练掌æ¡C++è¯è¨€çš„精髓ç»éžæ˜“事。目å‰ï¼Œä»‹ç»C++è¯è¨€çš„书数ä¸èƒœæ•°ï¼Œè¿™äº›ä¹¦è¦ä¹ˆç¯‡å¹…过大,è¦ä¹ˆå†…å®¹æ¯”è¾ƒå…·ä½“ã€æ·±å…¥ã€‚当然,适åˆåˆå¦è€…的书也比较多,其ä¸ä¹Ÿä¸ä¹ä¼˜ç§€çš„书。 但是,笔者ä¾ç„¶è€—费巨大的精力编写本书。笔者多年æ¥ä¸€ç›´ä»Žäº‹ä¸€çº¿æ•™å¦å·¥ä½œ,有ç€å¤šå¹´è®²æŽˆCè¯è¨€å’ŒC++è¯è¨€çš„ç»éªŒ,知é“å¦ç”Ÿå¦ä¹ C++è¯è¨€çš„主è¦éšœç¢æ˜¯ä»€ä¹ˆ,哪些问题对他们æ¥è¯´æ˜¯éš¾ä»¥ç†è§£çš„,哪些问题是相对比较容易的。笔者一直å°è¯•站在å¦ç”Ÿçš„角度看C++è¯è¨€åˆ°åº•是什么,如何以å¦ç”Ÿçš„æ€ç»´ç†è§£ä¸€ä¸ªè¯æ³•知识点。这也是编写本书的出å‘点。本书力求åšåˆ°æ·±å…¥æµ…出,通过大é‡çš„ç¤ºä¾‹æŠŠå¤æ‚的概念用浅显的è¯è¨€ä»‹ç»ç»™è¯»è€…。 二〠如何使用这本书 本书主è¦é¢å‘高ç‰é™¢æ ¡è®¡ç®—机专业的å¦ç”Ÿ,ä½¿ç”¨æœ¬ä¹¦æ—¶è¦æ³¨æ„ä»¥ä¸‹å‡ ç‚¹ã€‚ (1) éœ€è¦æœ‰Cè¯è¨€ç¼–ç¨‹åŸºç¡€ã€‚ä¸¥æ ¼æ¥è¯´,æœ¬ä¹¦å¹¶ä¸æ˜¯ä¸€éƒ¨å®Œæ•´çš„C++程åºè®¾è®¡è¯è¨€æ•™ç¨‹,å› ä¸ºæœ¬ä¹¦çœç•¥äº†ä¸€äº›å…³äºŽC++è¯è¨€çš„åŸºæœ¬è¯æ³•æ–¹é¢çš„内容,如基本数æ®ç±»åž‹(intã€charã€floatã€doubleç‰)ã€ç¨‹åºæŽ§åˆ¶ç»“æž„(顺åºç»“æž„ã€åˆ†æ”¯ç»“构和循环结构)ã€æ•°ç»„ã€æŒ‡é’ˆã€ç»“构体ã€è‡ªå®šä¹‰å‡½æ•°ç‰ã€‚C++è¯è¨€æ˜¯åœ¨Cè¯è¨€åŸºç¡€ä¸Šå‘展起æ¥çš„,它兼容Cè¯è¨€,æœ‰è®¸å¤šè¯æ³•与Cè¯è¨€è¯æ³•是相åŒçš„ã€‚å› æ¤,ç¬”è€…å»ºè®®è¯»è€…è¦æœ‰ä¸€å®šçš„Cè¯è¨€ç¼–程基础。(2) çªå‡ºæœ¬ä¹¦çš„基础性作用。通常,C++è¯è¨€æ˜¯å¦ç”ŸæŽ¥è§¦çš„第一门é¢å‘对象程åºè®¾è®¡è¯è¨€,他们缺ä¹ç¨‹åºè®¾è®¡çš„实际ç»éªŒ,而且没有å¦ä¹ æ•°æ®ç»“æž„ã€ç®—法ç‰ç›¸å…³è¯¾ç¨‹ã€‚所以,ç›®å‰ä»–们很难用C++è¯è¨€ç¼–写出实用的应用程åºã€‚本书以大é‡çš„ã€ç®€å•的控制å°åº”ç”¨ç¨‹åºæ¼”示C++è¯è¨€è¯æ³•åŠåŠŸèƒ½,通俗化地介ç»é¢å‘对象程åºè®¾è®¡ä¸æ™¦æ¶©çš„ã€éš¾ä»¥ç†è§£çš„æ¦‚念,希望读者ä¸è¦åŽŒçƒ¦è¿™äº›çœ‹ä¼¼ç®€å•ã€æ²¡æœ‰ä»»ä½•用处的示例。事实上,æ¯ä¸ªç¤ºä¾‹éƒ½æ˜¯ç¬”者精心设计的ã€å…·æœ‰ä»£è¡¨æ€§çš„,能够深刻剖æžC++è¯è¨€çš„æ¯ä¸ªè¯æ³•细节。但是,ç¬”è€…å§‹ç»ˆåšæŒä¸€ä¸ªè§‚点: å¦ä¹ C++è¯è¨€æ—¶ç»ä¸èƒ½æ²‰é™·äºŽC++è¯è¨€çš„è¯æ³•细节的汪洋大海ä¸ï¼Œå› 为C++è¯è¨€çš„è¯æ³•å¤ªè¿‡å¤æ‚,å¦‚æžœæ‹˜æ³¥äºŽè¯æ³•细节的实现,往往åªä¼šä½¿è¯»è€…深切地感到C++è¯è¨€è¯æ³•的枯燥,æ— æ³•ä»Žæ›´é«˜çš„è§’åº¦é«˜å±‹å»ºç“´åœ°ç†è§£é¢å‘对象程åºè®¾è®¡çš„æ¦‚念åŠç¼–程ç†å¿µã€‚而建立æ£ç¡®çš„é¢å‘对象程åºè®¾è®¡çš„ç†å¿µåŠç¨‹åºè®¾è®¡æ–¹æ³•是å¦ä¹ C++è¯è¨€çš„一个最主è¦ç›®çš„。 (3) 切忌眼高手低。å¦å¥½C++è¯è¨€é€šå¸¸éœ€è¦ç»è¿‡ä¸‰ä¸ªé˜¶æ®µ: 首先是模仿阶段。多读别人写的代ç ,䏿–æ£æ‘©ç¼–程者的心æ€,试图åšåˆ°ä¸Žç¼–程者的心çµç›¸é€š,彻底ç†è§£ä»£ç 的功能åŠè®¾è®¡æ€è·¯ã€‚其次是质疑阶段。质疑别人写的任何代ç ,力图从å¦å¤–一个角度找到解决问题的方法,åšåˆ°ä»¥æ›´ç®€æ´ã€æ˜“懂的代ç 解决相åŒçš„问题。但是,这个阶段编写的代ç 往往ç»ä¸èµ·æŽ¨æ•²ã€‚æœ€åŽæ˜¯è‡ªç”±å‘挥阶段。对于任何问题总能找到最æ°å½“的算法,ç¼–å†™å‡ºæ— æ‡ˆå¯å‡»çš„ã€å¥å£®çš„代ç 。笔者在教å¦è¿‡ç¨‹ä¸å‘现,有些å¦ç”Ÿç¼–写代ç çš„æ€è·¯å¾ˆâ€œå¥‡ç‰¹â€,代ç 虽然简å•å´ä¸å®¹æ˜“ç†è§£ã€‚而这些å¦ç”Ÿå¾€å¾€å¾ˆæ¬£èµè‡ªå·±çš„“æ°ä½œâ€,俨然把自己当作了“编程达人â€ã€‚事实上,æ€è·¯â€œå¥‡ç‰¹â€ã€å¯è¯»æ€§å·®çš„代ç 并䏿˜¯å¥½çš„代ç ,这些代ç ä¸å¾€å¾€å˜åœ¨è®¾è®¡æ¼æ´ž,ç»ä¸èµ·æŽ¨æ•²ã€‚所以,在使用本书的过程ä¸,笔者建议读者放下“身段â€,把æ¯ä¸ªç¤ºä¾‹éƒ½è¯»ä¸€éã€å†™ä¸€éã€æ”¹ä¸€é。读懂笔者的心æ€,看懂示例代ç ,然åŽäº²è‡ªç¼–写一é代ç ,力求åšåˆ°ä»¿è€Œä¸æŠ„。最åŽä¿®æ”¹ä»£ç ,达到“é’出于è“而胜于è“â€çš„æ•ˆæžœã€‚ 笔者很喜欢网上看到的一段è¯,å¤§æ¦‚æ„æ€æ˜¯: æˆ‘çŸ¥é“æ‰“基础是痛苦而且没有多少æˆå°±æ„Ÿçš„过程,但是在化茧æˆè¶ä¹‹å‰,我们还是è¦ç»§ç»åšè€Œä¸”è¦è®¤çœŸåœ°åšâ€œæ¯›æ¯›è™«â€,å› ä¸ºæˆ‘ä»¬çŸ¥é“æˆ‘ä»¬ä¼šæœ‰å˜æˆç¾Žä¸½è´è¶çš„那一天ï¼ä»¥æ¤ä¸Žè¯»è€…共勉。 三〠本书å„ç« å†…å®¹ä»‹ç» æœ¬ä¹¦å†…å®¹å…±åˆ†ä¸º10ç« ,包括åˆè¯†C++ã€é¢„备知识ã€ç±»ä¸Žå¯¹è±¡ã€è¿ç®—符é‡è½½ã€ç±»ç»§æ‰¿ã€å¤šæ€ã€æ¨¡æ¿ã€æ ‡å‡†æ¨¡æ¿åº“ã€è¾“å…¥/输出æµã€å¼‚常与æ–言。 第1ç« ä¸»è¦ä»‹ç»C++è¯è¨€çš„å‘展ã€ç‰¹ç‚¹åŠåº”用领域;C++è¯è¨€ç¨‹åºè®¾è®¡åŸºæœ¬è¿‡ç¨‹ã€ç¨‹åºåŸºæœ¬ç»“æž„ã€å称空间ã€å¸¸ç”¨ç¼–译器ç‰;Code::Blocks集æˆå¼€å‘环境,在Code::Blocksä¸è®¾è®¡C++è¯è¨€æŽ§åˆ¶å°åº”用程åºçš„基本方法åŠè¿‡ç¨‹ã€‚ 第2ç« ä¸»è¦ä»‹ç»C++è¯è¨€ä¸åŒäºŽCè¯è¨€çš„æ•°æ®ç±»åž‹ã€å˜é‡å£°æ˜ŽåŠåˆå§‹åŒ–方法,包括布尔类型ã€ç±»åž‹è½¬æ¢ã€è‡ªåŠ¨ç±»åž‹å£°æ˜ŽåŠå˜é‡çš„列表åˆå§‹åŒ–;数组的å¦å¤–三ç§å®žçŽ°æ–¹æ³•: vectorã€arrayå’Œstringå—符串;使用newå’Œdeleteè¿ç®—符申请内å˜åŠå›žæ”¶å†…å˜,引用与指针的è”系与区别,左值引用与å³å€¼å¼•用,内è”函数ã€é»˜è®¤å‚数函数åŠå‡½æ•°é‡è½½çš„æ¦‚念åŠä½œç”¨ç‰ã€‚ 第3ç« ä¸»è¦ä»‹ç»é¢å‘对象程åºè®¾è®¡çš„æ¦‚念åŠç¨‹åºè®¾è®¡ç†å¿µ,类的声明ã€å¯¹è±¡å®šä¹‰ã€æž„é€ å‡½æ•°ã€æžæž„函数ç‰,ç±»ä¸æˆå‘˜çš„访问方å¼,类的å°è£…性的æ„义,ç±»ä¸ç‰¹æ®Šæˆå‘˜(如陿€æˆå‘˜ã€å¸¸æˆå‘˜ç‰)的作用åŠä½¿ç”¨æ–¹å¼ï¼Œç±»çš„å‹å…ƒçš„作用åŠä½¿ç”¨æ³¨æ„事项。 第4ç« ä¸»è¦ä»‹ç»è¿ç®—符é‡è½½çš„æ¦‚å¿µã€æ„义,常用è¿ç®—符在自定义类ä¸çš„é‡è½½è§„则ã€é‡è½½æ–¹å¼,类型转æ¢å‡½æ•°åŠç±»åž‹è½¬æ¢æž„é€ å‡½æ•°ç‰ã€‚ 第5ç« ä¸»è¦ä»‹ç»ç±»çš„继承,包括程åºè®¾è®¡ä¸ä»£ç é‡ç”¨çš„æ„ä¹‰ã€ä¸åŒç»§æ‰¿æ–¹å¼ä¸‹ç±»ä¸æˆå‘˜çš„访问方å¼ã€å¤šé‡ç»§æ‰¿ç‰ã€‚ 第6ç« ä¸»è¦ä»‹ç»å¤šæ€,åŒ…æ‹¬é™æ€å¤šæ€æ€§åŠåЍæ€å¤šæ€æ€§ã€åŸºç±»ä¸Žæ´¾ç”Ÿç±»ä¹‹é—´çš„类型转æ¢ã€è™šå‡½æ•°ä¸ŽåЍæ€å¤šæ€æ€§çš„实现ã€çº¯è™šå‡½æ•°ä¸ŽæŠ½è±¡ç±»ç‰ã€‚ 第7ç« ä¸»è¦ä»‹ç»ç¨‹åºè®¾è®¡ä¸çš„代ç é‡ç”¨å’ŒèŒƒåž‹ç¼–ç¨‹çš„æ¦‚å¿µåŠæ„义,包括函数模æ¿çš„功能åŠä½¿ç”¨æ–¹æ³•ã€ç±»æ¨¡æ¿çš„功能åŠä½¿ç”¨æ–¹æ³•ã€å‡½æ•°æ¨¡æ¿åŠç±»æ¨¡æ¿çš„实例化ã€å¯å˜å‚数函数模æ¿ç‰ã€‚ 第8ç« ä¸»è¦ä»‹ç»æ ‡å‡†æ¨¡æ¿åº“(Standard Template Library,STL),STL主è¦åŒ…å«å®¹å™¨ã€è¿ä»£å™¨ã€ç®—法ã€å‡½æ•°å¯¹è±¡ç‰ã€‚æœ¬ç« å†…å®¹åŒ…æ‹¬åºåˆ—容器(vectorã€dequeã€list)åŠå®¹å™¨é€‚é…器(stackã€queue)ã€å…³è”容器(setã€mapç‰)ã€è¿ä»£å™¨(è¿ä»£å™¨çš„类型åŠä½œç”¨)ã€ç®—法(STLä¸å¸¸ç”¨çš„算法,如findã€sortã€for_eachç‰)åŠå‡½æ•°å¯¹è±¡çš„使用方法。 第9ç« ä¸»è¦ä»‹ç»è¾“å…¥/输出æµçš„æ¦‚念ã€C++䏿 ‡å‡†æµç±»åº“ã€æ ‡å‡†è¾“å…¥æµï¼ˆistreamï¼‰ã€æ ‡å‡†è¾“出æµï¼ˆostreamï¼‰ã€æ•°æ®è¾“å…¥/è¾“å‡ºçš„æ–¹æ³•åŠæ ¼å¼åŒ–æŽ§åˆ¶ã€æ–‡ä»¶æµç±»ã€æ–‡ä»¶æµå¯¹è±¡çš„åˆ›å»ºã€æ–‡ä»¶çš„æ‰“开与关é—ã€æ–‡æœ¬æ–‡ä»¶åŠäºŒè¿›åˆ¶æ–‡ä»¶çš„读/写方法ã€å—符串æµçš„æ¦‚念åŠä½¿ç”¨æ–¹æ³•ç‰ã€‚ 第10ç« ä¸»è¦ä»‹ç»ç¨‹åºè®¾è®¡è¿‡ç¨‹ä¸çš„异常处ç†,包括异常的概念ã€å¼‚常处ç†çš„æœºåˆ¶ã€å¼‚å¸¸ç±»ã€æ–言åŠé™æ€æ–言ç‰ã€‚ 四〠致谢 é¦–å…ˆæ„Ÿè°¢å±±ä¸œçœæ•™è‚²æœåŠ¡æ–°æ—§åŠ¨èƒ½è½¬æ¢ä¸“业对接产业项目(曲阜师范大å¦ç²¾å“旅游)对本书的资助。 笔者在编写本书的过程ä¸å¾—到了很多领导和教师的指导与帮助,也得到了父æ¯ã€çˆ±äººã€å©å的大力支æŒ,没有他们的帮助,笔者很难完æˆä¹¦ç¨¿ã€‚ 感谢禹继国教授ã€èµµæ™¯ç§€æ•™æŽˆ,他们为本书稿æå‡ºäº†ä¸€äº›å¾ˆæœ‰è§åœ°çš„æŒ‡å¯¼æ„è§ã€‚感谢清åŽå¤§å¦å‡ºç‰ˆç¤¾ç¼–辑的帮助。 感谢所有å‚与书稿编写的教师,主è¦å‚编人员有黄万丽ã€é©¬æ˜¥æ¢…ã€é—«è¶…ã€å¼ 秀娟ã€å¸å¹¿æ¶›ã€åˆ˜é‡‘星ã€å´”新春ã€ä»»å¹³çº¢ç‰,全体人员在编写过程ä¸ä»˜å‡ºäº†è¾›å‹¤çš„æ±—æ°´,在æ¤ä¸€å¹¶è¡¨ç¤ºæ„Ÿè°¢ï¼ 尽管我们付出了最大的努力,但是由于知识水平åŠèƒ½åŠ›æœ‰é™,书ä¸éš¾å…有ä¸å¦¥ä¹‹å¤„。真诚地希望å„ä½ä¸“å®¶åŠè¯»è€…æœ‹å‹æå‡ºå®è´µæ„è§,我们将ä¸èƒœæ„Ÿæ¿€ã€‚ 编者2019å¹´7月于曲阜师范大å¦