總金額: 會員:NT$ 0 非會員:NT$ 0 
(此金額尚未加上運費)
電子電信技術 電腦技術 計算技術、計算機技術
 
 
 
 
C/C++實踐進階之道:寫給程序員看的編程書
 作  者: 陳黎娟
 出版單位: 中國鐵道
 出版日期: 2018.05
 進貨日期: 2018/6/7
 ISBN: 9787113237585
 開  本: 16 開    
 定  價: 593
 售  價: 474
  會 員 價 : 435
推到Facebook 推到Plurk 推到Twitter
前往新書區 書籍介紹 購物流程  
 
編輯推薦:

珍貴心得與踩坑經歷娓娓道來,助力讀者扎實進階提升。

源代碼、精彩開發視頻及電子教程組成資料包,傾囊奉送。


內容簡介:

這是一本C/C++語言應用能力進階的圖書,總結了一個典型的學習者第101個小時開始的學習路線和心得,你值得擁有。
本書內容包括夯實C語言核心基礎、提升你的編程功力、積累專業程式員開發經驗、理解C++精髓和以C++為母語五個部分,內容豐富,集開發技巧、成長經驗和學習資料於一體,具有很高的實用性和可讀性,對於初級程式員和學習編程語言的大學生大有裨益,可以幫助其掌握C/C++語言精髓,提高自己的程式設計水準。


作者簡介:

陳黎娟:610103197504161642

目前就職於美國勝利通訊北京分公司,職位為Senior Firmware Engineer(高級固件工程師)。

先後在SunPlus,SST等公司擔任工程師和高級架構工程師。

在嵌入式系統、嵌入式介面和底層固件開發方面積累了豐富的經驗。


圖書目錄:

第1篇 夯實C語言核心基礎
第1章 Hello,C語言
1-1 閉上眼睛細數C語言的特點 2
C語言精巧 2
支持結構化程式編寫模型 2
變數和語句是C語言的細胞 3
數學運算和邏輯運算式是C語言的第一個難點 3
函數是C語言賜給我們最有力的武器 3
數組是我們第一次學習組織數據 4
指針是C語言的精華,但它是魔鬼發明的 4
struct是我們臨摹世界的畫板 4
掌握基本概念的組合才是成為C語言高手的必經之路 4
字串是指針確認的 5
位運算是C語言底層開發的特色 5
預處理命令是程式開發的腳手架 5
檔是一個序列 5
1-2 從基本概念開始 6
1-3 掌握C語言核心,逐步擴張 8
1-4 C++時代的C語言學習 11
1-5 C++:更好的C 12
新的注釋模式 13
新的輸入/輸出方法 13
const的新功能 13
變數的定義更加靈活 13
函數的重載 13
帶默認參數的函數 13
變數的引用類型 13
新的記憶體分配函數new和delete 14
內嵌(inline)函數 14
作用域運算符 14
第2章 建立起程序設計基本概念
2-1 軟體與程式 15
2-2 程式與可執行檔 16
2-3 程式與根源程式 17
2-4 根源程式與程式設計語言 18
2-5 程式設計的基本過程 19
2-6 檔和目錄 19
2-7 理解編碼上機調試和步驟 22
2-8 C/C++程式員成長經驗 23
第一階段:C語言的學習 23
第二階段:課程設計和畢業設計 24
第三階段:硬體開發和學習C++ 25
第四階段:中型專案開發經驗 25
第五階段:大型專案開發經驗 25
總結個人學習成長的道路 25
因材施教:使用兩套教材 26
第3章 在Visual C++中驗證C程式
3-1 選擇Visual C++的三個理由 27
3-2 調試程式的五個步驟 28
3-3 編寫Console應用 32
3-4 跨過調試程式的最初障礙 35
語法錯誤(Syntax Error) 38
語義錯誤(Semantic Error) 38
運行錯誤(BUG) 39
3-5 Visual C++簡易使用參考 40
新建文檔 40
打開文檔 41
查看文檔 42
保存文檔 44
在打開的文檔中搜索文本 45
在已打開的文檔中替換文本 45
在磁片檔中搜索文本 46
常規運算式搜索 46
3-6 從Turbo C到Borland C++ 47
3-7 理解函數庫和頭檔 48
第4章 代碼基本邏輯:順序、選擇和迴圈
4-1 流程圖 51
4-2 順序結構 52
【示例4-1】輸入三角形的三邊長,求三角形面積 52
4-3 選擇結構 52
4-3-1 if語句 52
【示例4-2】if語句的基本用法(輸入數值,如果大於0,輸出“正數”) 53
【示例4-3】利用if-else語句對數值進行正負的判斷 54
4-3-2 switch語句 54
【示例4-4】利用switch判斷用戶輸入的日期是星期幾 55
【示例4-5】判斷輸入的日期是星期幾(使用break語句) 56
【示例4-6】利用if語句根據成績範圍給出等級 56
4-4 迴圈結構 57
4-4-1 利用goto語句和if語句構成迴圈 57
【示例4-7】計算1+2+3+…+100的值 57
4-4-2 while語句 58
【示例4-8】利用while迴圈語句計算1+2+3+…+100的值 58
4-4-3 do-while語句 58
【示例4-9】利用do-while迴圈語句來計算1+2+3+…+100的值 59
4-4-4 for語句 59
【示例4-10】小高斯的for迴圈語句實現方法。 60
【示例4-11】小高斯的for迴圈語句實現方法之二(省略運算式2的應用舉例) 60
【示例4-12】小高斯的for迴圈語句實現方法之三(省略運算式3的應用舉例) 60
【示例4-13】小高斯的for迴圈語句實現方法之四(省略運算式1和運算式3的
應用舉例) 61
【示例4-14】當需要無限迴圈時,for迴圈語句運算式全部被省略的應用舉例 61
【示例4-15】小高斯的for迴圈實現方法之五(for語句中的逗號運算式) 61
【示例4-16】讀懂奇怪的for迴圈(for迴圈語句中的運算式2為特殊運算式時) 61
【示例4-17】利用while迴圈求滿足n2-15n-36>0的最小整數 62
4-4-5 break語句 63
【示例4-18】演示break語句的應用:計算1+2+3+…+100的值 63
4-4-6 continue語句 63
【示例4-19】演示continue語句的應用:計算1到100的偶數之和 63
4-5 本章綜合實例 64
4-5-1 綜合實例1:求某整數段區間中的素數,並輸出 64
4-5-2 綜合實例2:根據用戶輸入的年份判斷年份是否為閏年 66
第5章 加強對函數的理解
5-1 函數的引入 67
【示例5-1】求從1加到100的值 67
【示例5-2】求從1加到n的值 68
【示例5-3】求從1加到n的值(高斯演算法) 69
5-2 函數的基本概念 69
5-3 庫函數 70
5-4 函數的嵌套調用 71
【示例5-4】在max3函數中實現嵌套調用 71
5-5 代碼封裝:模組化程式設計的起步 71
5-6 介面/實現思想的第一次體現 72
5-7 總結一下:函數幫你編寫更好的代碼 72
5-8 對比Pascal語言和C語言中函數使用的差異 74
第6章 總結:快速掌握C語言基礎知識
6-1 再次Understand C 76
6-2 把基礎知識串起來 77
6-3 綜合實例1:列印Fibonacci數列 78
6-4 綜合實例2:把Fibonacci數列中的素數找出來 79
6-5 綜合案例3:在Fibonacci數列中加入數組的應用 80
6-6 最後的綜合性代碼 81
6-7 成為C程式員你還需要知道的事情 82
6-8 三小時你可以學會FORTRAN 85
第2篇 提升你的編程功力
第7章 逐步寫出大程式
7-1 準備案例1:閏年的判斷 88
7-2 準備案例2:這一天是星期幾 89
7-3 更高要求:萬年曆的編寫 91
7-4 再完善一下:列印某年日曆 94
7-5 總結與思考:程式成長與模組化 96
第8章 自己動手編寫小工具
8-1 DIR命令今猶在 97
8-2 DOS版DIR命令 98
8-3 Windows版本的DIR 100
8-4 工具編寫總結和練習 103
8-5 繼續學習和提高 104
第9章 學會組織自己的代碼
9-1 解決問題的基本方法和C程式的基本結構 105
9-2 用Project管理自己的代碼 108
9-3 為自己的代碼擴充功能 110
9-4 養成一些編碼的好習慣 111
第10章 讀源代碼,逐步體會演算法的力量
10-1 讀函數源代碼,學技巧 116
10-2 體會演算法的力量 118
【示例10-1】判斷一個自然數n是否是素數 119
10-3 演算法的三重境界 121
【示例10-2】寫一個函數計算當參數為n(n很大)時的值1-2+3-4+5-6+7-…+n 121
【示例10-3】在一個很小的記憶體空間中,將北京某電話局的8位電話號碼排序。號碼在
10000個以內 122
10-4 那些C語言必須調試的陷阱 123
第3篇 積累專業程式員的開發經驗
第11章 煩瑣但很重要的變數和類型
11-1 電腦是如何存儲變數的 126
11-2 確保每個對象在使用前已被初始化 131
11-3 局部變數和全局變數的差別 133
11-3-1 首先理解函數中的局部變數 134
11-3-2 其次理解函數外的全局變數 135
11-3-3 掌握變數在內存中的存儲方式 136
11-4 掌握變數定義的位置與時機 138
11-5 引用難道只是別人的替身 140
第12章 理解數組和指針
12-1 理解指針的本質 143
12-1-1 指針變數和變數的指針 143
12-1-2 空指針和void指針 145
12-1-3 const修飾指針 146
12-2 論數組和指針的等價性 147
12-3 再論數組和指針的差異性 149
12-3-1 字串數組與字元指針的區別 149
12-3-2 當編譯器強行把指針和數組混合 151
12-4 充滿疑惑的數組指針和指針數組 152
第13章 常見更要謹慎的字元和字串
13-1 關於字元編碼的討論 155
13-2 請牢記字串結束標誌為‘\0’ 157
13-3 請務必小心使用memcpy()系列函數 159
【示例13-1】POD對象的複製 160
13-4 正確使用字串處理函數 161
第14章 運算式和語句中的陷阱
14-1 運算符引發的混亂 164
14-2 運算式求值順序不要想當然 167
14-3 switch-case語句的陷阱 170
14-3-1 正確使用break語句 171
14-3-2 case標號和default標號的正確使用 173
14-4 a || b和a&&b的陷阱 174
14-4-1 陷阱一:短路求值 175
【示例14-1】沒想清邏輯,代碼死迴圈 175
14-4-2 陷阱二:邏輯運算混淆使用 176
14-5 “懸掛”else引起的問題 177
第15章 函數的秘密
15-1 禁止函數返回局部變數的引用 180
15-2 函數傳值、傳指針及傳引用的效率分析 183
15-3 內聯函數會像宏一樣替換嗎 188
15-4 函數重載需考慮什麼 191
15-4-1 準確理解函數重載 191
【示例15-1】實現一個列印函數,既可列印int類型,也可列印string類型 191
15-4-2 為什麼引入函數重載 192
15-4-3 如何處理函數重載 192
15-5 不要讓main返回void 195
15-5-1 理解main函數的定義形式 195
15-5-2 main函數的返回值作用 196
15-5-3 void main()形式函數的風險隱患 197
15-5-4 “好壞難定”的準則 197
15-6 儘量拒絕使用變參函數 198
【示例15-2】實現一個支持std::string的printf 199
15-7 為何降低函數的圈複雜度 202
15-7-1 提煉函數的方法 203
15-7-2 以明確函數取代參數 204
第16章 正確使用預處理
16-1 使用#define定義字面值和偽函數 206
16-1-1 簡單宏定義(字面值) 206
16-1-2 #define和const定義的畯常量對比 207
16-1-3 帶參數的宏定義(偽函數) 208
16-1-4 帶參數的宏和函數的區別 208
16-1-5 引入宏的優點 209
16-1-6 宏定義和命名空間的關係 209
16-2 #define的使用陷阱 210
16-2-1 由操作符優先順序引起的問題 210
16-2-2 使用宏定義,不允許參數發生變化 211
16-2-3 使用do{}while(false)將宏定義包含的多條運算式放到大括弧中 211
16-2-4 關於...的使用 212
16-2-5 消除多餘的分號 213
16-3 防止重複包含頭檔 214
【示例16-1】頭檔重複包含bug 214
16-3-1 解決方案之一:#ifndef方式 215
16-3-2 解決方案之二:#pragma once 215
16-3-3 #pragma once與 #ifndef的區別 216
16-4 assert的副作用 216
【示例16-2】斷言出現bug 217
16-5 多學一點,關於#和##的討論 219
16-5-1 #讓字串巧妙用在宏定義中 219
16-5-2 ##讓宏定義像函數一樣輸入參數 220
16-5-3 #與##使用的陷阱 221
第17章 非絕對禁止者,皆可使用
17-1 表示語句結束的分號的思考 222
17-2 goto語句真的一無是處嗎 224
17-2-1 觀點一:goto語句是有害的 225
【示例17-1】使用goto語句執行數組元素的交換順序 225
17-2-2 觀點二:某些情況下支持使用goto語句 226
17-3 條件操作符和逗號操作符 229
17-3-1 理解條件操作符並用好它 229
17-3-2 讓逗號操作符派上用場 230
17-4 和魔鬼數字說再見 230
17-4-1 魔鬼數字帶來的麻煩 230
17-4-2 給魔鬼數字起一個名字 231
17-5 關於迴圈語句的變化 232
17-5-1 新舊標準中for語句的變化 232
17-5-2 巧用do迴圈宏定義 233
17-5-3 迴圈語句的效率 234
第18章 程式員應該知道的指針技術
18-1 深刻理解void和void* 236
18-2 防微杜漸,拒絕野指針 239
18-2-1 野指針產生的原因 240
18-2-2 預防野指針的策略 241
18-3 “臭名昭著”的空指針到底是什麼 242
18-3-1 怎樣在程式中獲得一個空指針 243
18-3-2 使用“if(p)”檢查空指針是否可靠 243
18-3-3 NULL 是什麼,它是如何定義的 244
18-3-4 如果 NULL和0作為空指針常數是等價的,到底該用哪一個 244
18-3-5 NULL 可以確保是 0,但空指針卻不一定 245
18-3-6 利用空指針(NULL),提高程式運行效率 245
18-4 多維數組和指針 245
【示例18-1】二維數組元素的遍曆(兩種多維數組聲明方式的比較) 248
18-5 引用和指針的差異 249
18-5-1 相同點:都是地址概念且可實現繼承類的動態綁定 250
18-5-2 不同點:五方面差異一一道來 251
第19章 C++新增關鍵字中的關鍵
19-1 盡可能多地使用const 254
19-1-1 函數聲明使用const 255
19-1-2 函數返回值聲明為const 255
19-1-3 const 成員函數 256
【示例19-1】字串輸出次數統計(const成員函數) 256
19-1-4 儘量用const常量替換#define常量定義 257
19-2 volatile和mutable用在何處 258
19-3 儘量用new/delete替代malloc/free 263
19-3-1 談談二者的區別 263
【示例19-2】增加new/delete的意義 263
19-3-2 New運算符的三種形式分析 265
19-4 使用new/delete時要採用相同形式 267
【示例19-3】C++中的記憶體管理(申請的資源放到同一個類中進行管理) 268
19-5 sizeof和對象的大小 270
19-5-1 講講sizeof的用法 271
19-5-2 標準數據類型的sizeof 271
19-6 謹慎使用static 276
19-6-1 static使用方式之靜態局部變數 276
19-6-2 static使用方式之靜態全局變數/函數 277
【示例19-4】就算你用了extern,static也禁止你使用 278
19-6-3 static使用方式之靜態成員變數/函數 278
【示例19-5】……
第20章 專業程式員也經常犯的錯
20-1 枚舉和一組預處理的#define有何不同 281
20-2 為何struct x1{struct x1 stX};無法通過編譯 284
【示例20-1】CA、CB兩個類相互包含引用問題(無法通過編譯) 285
【示例20-2】CA、CB兩個類相互包含引用問題(前向聲明實現) 286
【示例20-3】CA、CB兩個類相互包含引用問題(friend聲明實現) 286
20-3 實現可變數組struct{int namelen; char namestr[1];}; 287
20-4 typedef使用的陷阱 290
20-4-1 typedef和宏混用陷阱 290
20-4-2 typedef新規和簡化技巧 292
20-4-3 類回調函數的實現 293
【示例20-4】隧道CTunnel類回調函數的聲明和實現 293
20-5 優化結構體中元素的佈局 294
20-5-1 記憶體對齊 295
20-5-2 progma pack()宏對齊 297
20-6 既有結構,為何引入聯合 298
20-6-1 結構體與聯合體的差異 298
20-6-2 聯合體的經典應用場景 300
20-7 提防隱式轉換帶來的麻煩 301
20-7-1 隱式轉換發生的幾種情況 301
20-7-2 一個不經意的隱式轉換陷阱 304
20-8 如何判定變數是否相等 305
第4篇 C++和類——面向對象的世界觀
第21章 從精通C到學習C++
21-1 我們為什麼要學習C++ 312
21-2 故事:教C語言高手學C++ 313
21-2-1 第一幕:用C++,程式會簡單得多 313
21-2-2 第二幕:類就是封裝 315
21-2-3 第三幕:用另外一個視角看類 316
21-2-4 第四幕:成長日誌 319
21-3 拾級而上,成為C++高手 319
第22章 面向對象設計思想和類
22-1 思路決定代碼,程式設計思想 321
22-1-1 機器邏輯化編程思路:結構化程式設計 321
22-1-2 模擬現實世界的思路:面向對象程式設計 322
22-2 類,對現實世界抽象 323
22-2-1 類的定義和組成 323
【示例22-1】定義一個手機的類 324
【示例22-2】手機類數據成員的聲明 324
【示例22-3】手機類數據成員的類型 325
【示例22-4】定義一個手機的類,包括一個顯示手機名、型號、尺寸的成員函數 326
22-2-2 類成員的訪問控制 326
【示例22-5】類成員的訪問控制屬性 327
【示例22-6】定義一個手機的類:實現顯示手機名、型號、尺寸的功能 328
22-2-3 類實例和類成員訪問 328
【示例22-7】聲明一個描述IPhone X手機的實例指針並為其賦值 329
【示例22-8】編寫一個手機的類,實現設置和顯示手機名、型號、尺寸的功能,
並聲明一個針對IPhone X型號手機的實例,實現設置和顯示機器名、
型號、尺寸的功能 330
22-2-4 類的作用域和對象的生存週期 331
【示例22-9】手機類的作用域 331
22-2-5 this指針 332
【示例22-10】利用this指針訪問手機類中的數據成員 332
22-2-6 靜態成員 333
【示例22-11】定義一個手機短資訊的類 333
【示例22-12】編寫一個手機短資訊類,要求能夠統計短資訊總數的功能 333
【示例22-13】編寫一個手機短資訊類,利用靜態成員函數取得短資訊總數 336
【示例22-14】類的靜態成員訪問 337
22-2-7 常成員 337
【示例22-15】編寫一個手機短資訊類,定義一個用於表示資訊最大長度的常數據
成員 337
【示例22-16】編寫一個手機類,定義用於顯示手機基本資訊的常成員函數 339
22-3 構造函數和析構函數 340
22-3-1 構造函數 340
【示例22-17】編寫一個手機類,定義其構造函數,對手機基本資訊進行初始化 340
【示例22-18】編寫一個手機類,定義其構造函數,採用帶有參數的構造函數對手機基本
資訊進行初始化 342
【示例22-19】定義一個描述IPhone X手機的類,構造函數帶有默認的參數 343
22-3-2 複製構造函數 344
【示例22-20】編寫一個手機類,定義其複製構造函數,實現對實例的複製 344
【示例22-21】類的複製構造函數舉例(當函數的形參是類的實例時) 345
【示例22-22】類的複製構造函數舉例(當函數的返回值為類的實例時) 345
22-3-3 默認複製構造函數 346
【示例22-23】編寫一個手機類,利用默認複製構造函數,實現對實例的複製 346
22-3-4 淺複製和深複製 347
【示例22-24】編寫一個手機類,利用開闢堆記憶體的方式來存儲手機名;利用默認複製
構造函數,實現對實例的複製 348
【示例22-25】編寫一個手機類,利用開闢堆記憶體的方式來存儲手機名;利用自定義
複製構造函數,實現對實例的複製 349
22-3-5 析構函數 351
【示例22-26】編寫一個手機類,利用開闢堆記憶體的方式來存儲手機名;利用析構函數
對實例進行析構 351
22-4 類的組合 352
22-4-1 類的組合的概念 352
【示例22-27】手機組合類的定義 352
【示例22-28】學生組合類的定義 353
22-4-2 組合類的構造函數和析構函數 353
【示例22-29】學生組合類的構造函數和析構函數的調用順序 353
22-4-3 組合類的初始化 355
【示例22-30】定義一個面上的線段類,能夠計算線段的長度 355
22-5 綜合實例:定義員工類,實現員工資訊的存儲和輸出 356
22-6 萬事萬物皆對象 359
第23章 重載完善類方法
23-1 讓函數適應不同類型數據,適應多參數 361
23-1-1 合併相同功能的函數,重載函數的定義 361
【示例23-1】利用重載定義求絕對值的函數 362
23-1-2 重載函數的匹配有原則 362
23-2 讓你的代碼更加直觀,運算符重載 363
23-2-1 當操作自定義數據時,考慮運算符重載 363
【示例23-2】定義一個複數類 363
【示例23-3】複數類的加法運算 364
23-2-2 重載的是已經定義的運算符 364
【示例23-4】利用運算符重載來實現複數的加減運算(運算符作為成員函數) 366
【示例23-5】利用運算符重載來實現複數的加減運算(運算符作為友元函數) 367
23-2-3 讓代碼看起來像C++自帶的語法 368
【示例23-6】利用運算符重載實現複數類的增量運算 367
【示例23-7】利用友元函數來實現重載 370
23-2-4 轉換運算符重載的技巧 370
【示例23-8】重載強制轉換符實現將複數轉化為實數 371
【示例23-9】運算符重載的二義性問題 372
23-2-5 賦值運算符也能重載 372
【示例23-10】定義一個描述手機的短資訊類,重載賦值運算符 373
23-3 重載讓C++更自然 373
【示例23-11】定義一個自定義字元類,進行下標運算符重載 373
第24章 類的繼承
24-1 像生物一樣進化:繼承與派生 376
24-1-1 繼承與派生的概念 376
24-1-2 代碼的進化,派生類的聲明 377
【示例24-1】研究生類可以通過繼承學生類來定義 378
24-1-3 類的成長,生成派生類的步驟 378
【示例24-2】通過繼承學生類來實現研究生類 379
24-2 類的隱藏與介面,繼承中的訪問控制 381
24-2-1 公有繼承的訪問控制 381
【示例24-3】已經存在一個點類(Point類),表示幾何上的“點”,通過繼承點類來定義
一個線段(Linesegmen)類(通過公有繼承進行實現) 381
24-2-2 私有繼承的訪問控制 383
【示例24-4】已經存在一個點類(Point類),表示幾何上的“點”通過繼承點類來定義
一個線段(Linesegment類)(通過私有繼承進行實現) 383
24-2-3 保護繼承的訪問控制 384
【示例24-5】已經存在一個點類(Point類),表示幾何上的“點”,通過繼承點類來定義
一個線段(Linesegment類)(通過保護繼承進行實現) 385
24-3 派生類的構造函數和析構函數 386
24-3-1 派生類的構造函數 386
【示例24-6】通過繼承學生類來實現研究生類,定義研究生類的構造函數,對基類成員
和派生類成員進行初始化 387
24-3-2 派生類的析構函數 390
【示例24-7】多繼承並含有內嵌實例的類的析構函數的工作 390
24-4 基類與派生類的相互作用 391
24-4-1 派生類成員的標識和訪問 391
【示例24-8】多繼承並含有相同類成員方法的析構函數的工作 392
【示例24-9】作用域分辨符的嵌套使用的錯誤 393
24-4-2 基類和派生類賦值規則 394
【示例24-10】基類和派生類實例的賦值規則演示 395
24-5 不抽煙,不喝酒,乞丐和好男人的屬性居然一模一樣 395
【綜合實例24-1】編寫一個操作日期(年、月、日)和時間(時、分、秒)
的程式 395
【綜合實例24-2】定義在職研究生類,通過虛基類來描述 397
第25章 虛函數產生多態性
25-1 巧妙適應多種情況,C++的多態性 403
25-1-1 多態的概念和類型 403
25-1-2 多態的實現方式 404
25-2 虛函數 404
25-2-1 虛函數的概念和定義 404
【示例25-1】在學生類與研究生類繼承的代碼基礎上增加計算學生費用的函數
(虛函數實現) 404
【示例25-2】利用多態性來實現學生類的學費計算 407
25-2-2 虛函數的使用規則 410
25-3 純虛函數與抽象類 410
25-3-1 純虛函數 410
25-3-2 抽象類和抽象基類 411
【示例25-3】抽象類的定義和使用:定義一個抽象類,在其派生類中實現虛函數
介面display( ) 411
25-4 綜合實例:按設定規則輸出某企業各類員工的人員姓名與相應薪水 412
25-5 面向對象還是面向過程 419
第5篇 以C++為母語
第26章 網路工具Ping的功能實現
26-1 Windows下命令行:Ping命令 424
26-2 網路數據翻譯官:Wireshark數據包分析 426
26-3 溝通的藝術:Ping實現原理分析 428
26-3-1 互聯網通信原理 428
26-3-2 網際控制報文協議介紹 429
26-4 利用系統API:Windows網路編程技術 429
26-5 編程模擬實現Ping命令 433
26-5-1 先梳理程式設計思路 433
26-5-2 整體的執行流程 433
26-5-3 關鍵代碼的解析 435
26-6 總結和建議讀者的練習 442
第27章 C#探索之旅
27-1 組件,還是組件 443
27-2 C#版本的microEditor 443
27-2-1 啟動Visual C#熟悉基本介面 444
27-2-2 尋找Editor組件 445
27-2-3 給應用程式添加菜單功能 446
27-2-4 調用標準對話框 447
27-2-5 別讓右鍵空白 448
27-3 前事不忘,後事之師:有經驗的程式員也可能做錯 448
27-4 解析C#應用程式結構 449
27-4-1 using namespace 449
27-4-2 class、Main還有Application 449
27-5 小結:WinForms組件庫使用心得 450
27-6 練習:為microEditor添加新功能 451
27-7 我一直想弄明白的幾個問題 451
27-8 思考:如何快速掌握C# 452


章節試讀:

C/C++的數組是從0開始編號,我們也從第0章開始吧!
作為職業程式員,在生活和網路中,學弟學妹們問得多的兩個問題是:收入如何?你是如何成為專業程式員的?對於第一個問題,我一般回答,收入還可以,關鍵是有時的成就感非常讓人滿足。而第二個問題還真不好回答。我只能說讀書的時候,就有點兒喜歡編程,就業的時候,發現程式員職位的薪水比較高,工作了幾年,就逐漸成了職業程式員了。要詳細地說,基本上需要一本書的內容。這也是本書的緣起。
讀者:理工科大學生
有一個現象,在職業程式員中,大學是電腦專業的並不多。這說明,一方面,電腦應用的迅猛發展,使得電腦應用人才缺乏;另一方面,不少理工科專業和電腦專業天然接近,成為職業程式員也不是一件很難的事情。
事實上也是如此,大多數理工類專業開設了不少程式設計的相關課程,只需要有一定的興趣愛好,再加上一定的訓練,可以比較輕鬆地成為專業程式員。因為電腦在各行各業的應用,對於理工科專業的學生來說,編程能力也是一個非常重要的技能。
所以,本書將理工科大學在校生和剛剛進入職場的新人,作為讀者對象,希望會對這些人有所幫助。
定位:你的第二本程式設計圖書
幾乎所有理工類大學都會開設程式設計語言課程。每年也會有數百萬人報名參加電腦等級的程式設計類考試。這是成功的第一步。但是,會基本語法,不一定會編寫程式,不一定能運用到實際中去解決問題。
本書定位於理工科大學生的第二本程式設計圖書,在已有的程式設計語言的基礎上逐步提高,具備專業程式員的基礎。花一點時間閱讀本書,你就可以多擁有一項能力。從學生到職業程式員,在工作和生活等多方面都要有一定的轉型和適應期。本書出版的重要目的是幫助讀者完成這個轉型,幫助讀者跨越幾個技術學習上的臺階。
熟練掌握C/C++的意義
掌握C/C++的好處如下:
(1)C語言和C++基本上是使用量第一的開發語言,C/C++是現代程式設計之母,C#和Java等都是在C++的基礎上演化而來的,因此掌握了C/C++,對學習Java和C#會很有幫助。
(2)在C/C++的提高學習中,會涉及電腦的數據結構、操作系統等知識,會提高自己解決問題的綜合能力。程式設計的學習領域很多,範圍非常廣,新概念、新知識層出不窮。但只要你掌握的知識結構合理,綜合能力高,學習這些新東西將非常容易。
(3)熟練掌握C/C++,是很多單位招聘的基本要求,大多數理工科專業的在校大學生已經學習了C語言的基本語法,或者已經有了一定的編程基礎,只需要再花一定的時間鞏固掌握即可。
成為專業程式員的臺階
我們都知道,從學生到職場人士,有幾個臺階需要跨越。回顧一下一個C/C++程式員的成長過程:
第一個臺階,C語言入門。簡單來說就是能通過大學的C語言考試,或者通過電腦等級考試的二級C。
第二個臺階,熟悉庫函數。C語言的不少功能是通過庫來實現的,學習庫函數實際上是熟悉C語言的重要階段。
第三個臺階,能編寫比較大一點兒的程式。通過編寫千行內的程式,可以積累函數劃分、調試經驗,慢慢對C/C++語言會用得非常熟練。
第四個臺階,能自己編寫一些小的工具。這種訓練能積累解決問題的方法。
第五個臺階,建立Project的概念,能把程式分解成幾個代碼檔。
第六個臺階,洞悉程式開發的真相。理解演算法、數據結構、解決問題的方法,領域類知識等,這些比語法更重要。
第七個臺階,掌握宏、指針、記憶體管理、static和const等專業C/C++程式經常需要的關鍵用法。
第八個臺階,掌握C++的精髓。C++雖然內容豐富,Core和C語言也不大。這些內容,也是程式設計語言的精髓。
在跨越了這八個臺階之後,只需要再經歷一些專案開發的強化訓練,即可成為一個合格的C/C++程式員。
掌握C/C++的學習地圖
結合十多年的C/C++學習和成長經驗,結合當前就業的需要,我們勾勒出一個在校大學生或職場新人的程式設計學習地圖。
如何學習才能快速掌握C/C++呢?程式員積累了豐富的經驗並總結出了下麵的學習經驗。只要你跟隨學習方案,每週抽出3個獨立時間段進行上機實踐,每次至少2個小時。一共大約需要240個小時的上機訓練,即大約40周的自我訓練。多2個學期,你就能獲得一個質的飛躍。再輔以其他適當的訓練,即可成為一名合格的程式員。
根據學習地圖和學習經驗,我們設計了本書的內容。全書共分為5篇,下麵分別介紹這五篇的內容安排。
第1篇 夯實C語言核心基礎
本書定位的是讀者的第二本程式設計類圖書。所以,讀者可能有以下三種情況:
(1)已經學習了一門《C程式設計》之類的課程。第1篇,可被視作為一個C程式設計的濃縮,幫助你回顧瞭解C語言核心的內容。
(2)正在學習《C程式設計》的課程。第1篇可以作為教學輔導圖書,一邊學習教材,一邊閱讀本書,時刻提醒讀者注意入門之初別糾纏於語法細節,起到幫助讀者糾正學習方向的作用。
(3)學習了一門程式設計語言,是VB之類的非C程式設計語言。第1篇可以作為快速學習C語言的教材。當然,這些內容還遠遠不夠,我們在網上提供了一個免費的C語言學習教材。
總的來說,第1篇主要是配合讀者正在學習的C語言教材,幫助讀者掌握C語言核心的語法。同時,幫助讀者建立重要的程式設計概念。
第2篇 提升你的編程功力
按照學習地圖,提供全書重要的學習概念和學習內容。
首先安排庫函數的學習,通過學習庫函數的應用,一方面熟悉語法,另一方面,建立起介面的觀念,進一步通過自己編寫個別庫函數的訓練,可以較快的提升編程能力。
其次是逐步編寫大軟體的專案和辦法。教會讀者如何編寫自己的小工具軟體,讓讀者在趣味中學習。
後是讓讀者自己掌握軟體運行時的數據結構、硬碟上的檔數據和用戶看到的介面之間的奧秘。
當讀者明白了這些奧秘後,就會知道自己需要掌握的知識、演算法和數據結構,解決問題的方法。接下來,本書通過其他章節,將讀者引入這些領域中,讓讀者得到初步的修煉。
可以說,這部分內容是本書的及格線。即使讀者沒有掌握本書的其他內容,只要能理解這部分內容,對讀者提升對電腦的認識將會有非常大的幫助。
有了上面的基礎,可以進入熟練掌握一些關鍵語法的階段,這就是static、const、指針、記憶體管理等。我們對這些內容會進行比較詳細的講解。要知道,這些內容一般都是存在於多本圖書之中,而這些內容,又是C/C++程式員必須掌握的語法內容,面試常考,偏偏理解起來又有一些難度。所以,編寫時將其放在了熟悉語法,編寫了幾個小工具之後,作為提高訓練之用。
第3篇 積累專業程式員的開發經驗
掌握了C/C++之後,也許會成為一個嵌入式開發程式員。畢竟,在資訊時代,這樣的工作崗位會越來越多。
為此,我們也花了一定的篇幅來介紹在跨越第一到第七個臺階之後的程式員。掌握哪些知識,可以成為一個合格的嵌入式程式員。要知道,嵌入式開發專業方面的人才需求極大,數學、物理、機電、儀器、電腦、電子等相關專業的學生,成為這個行業的主要人才來源,這就相當於給這部分同學,提供了一個就業出口。
第4篇 C++和類——面向對象的世界觀
C++領域有很多經典名著,但這些圖書都有一個統一的缺點:太厚。給初學者以恐懼感,不太容易看得完。
C++確實博大精深,編程模式多,涉及面廣。比如,引入類和對象的概念之後,和前面的知識一交叉,可以有類和指針交叉:對象的指針,對象的記憶體分配等;類和數組交叉:對象數組;類和函數的交叉:方法和函數的區別,對象作為函數的參數等。引入任何一個新的概念,會引發連鎖反應。更何況C++引入的內容越來越多。因此很少有人敢稱他掌握了C++的全貌。
在實踐中,我們會發現,經常用到的只是類、封裝、繼承、虛函數和多態等幾個有限的C++精華,這基本上是所有面向對象開發語言的小核心子集。
接下來,我們以抽絲剝繭的方式,把這些C++ Core內容抽取出來,重點講解,作為讀者學習其他C++程式設計教材的補充。
本篇內容和C++教材結合起來學習是比較好的選擇。一個全面,一個重點;一個重在語法細節的闡述,一個重在關鍵要點的把握;一個重在從語言學習的角度編寫,一個從實踐需要角度側面敘述。一厚一薄,互相配合,學習起來更容易。
第5篇 以C++為母語
並不是每一個讀者,將來都會成為一個C/C++程式員。
大多數現代的程式設計語言都和C++有一定的親緣關係,Delphi,Java,C#這些先後出現的面向對象的開發語言,在C++的基礎上,都有一些自己的獨有的特點。對學習者來說,在C/C++上的學習投資,完全可以用到這些語言的學習上。你的C++功力越深厚,學習這些新的開發語言的時間就越短。
本篇簡單講述如何在已經掌握的知識基礎上,快速學習這些帶有面向對象開發特性的程式設計語言。強化每個現代人都必須掌握的學習能力。
後續學習與提高
有了前面的學習基礎,還有兩個學習與提高方向,一個是走Java或者C#的通用程式員之路,另外一個是成為一名嵌入式程式開發人員。當然,建議你繼續閱讀更多的C/C++著作,不斷提升自己的“內功”,這對讀者學習任何新的工具或者開發語言,都將會帶來很大的幫助。
對於通用程式員之路,一般有三種選擇,一個是以Visual C++作為主要的開發工具,這在開發Windows相關系統類應用中比較多見,有了前面的基礎,需要適當的Visual C++專案開發訓練。推薦訓練之前學習《深入淺出MFC》這本書。其次,是走Java或者C#的開發之路,這方面的好書很多,有了本書的基礎,讀者可以先選擇一本語法類,快速強化訓練掌握語法,然後根據自己的情況選擇合適的圖書專案和技巧開發類圖書。
對於嵌入式程式員就業分支,在學習本書的基礎上,可以再開發一個實踐專案,封閉開發1∼2個月。每天至少4小時,總共需要至少100個小時。經過一個比較大的專案的操作過程,應該即可成為一個合格的嵌入式開發程式員了。
輔助學習材料
在圖書封底左上方的二維碼下載包中,我們精心放置了以下資料:
• 《C語言百問百例》和《C++語言百問百例》兩套電子書。
• 包含14講視頻的C語言高級教程。
• 包含19講視頻的嵌入式LINUX培訓計畫教程。
• 本書源代碼。
局限性和副作用
雖然竭力回憶我們成長之初的一些代碼編寫經驗,但非常遺憾,現在只記得剛開始的時候,編寫一個程式,會有滿屏的錯誤需要糾正。至於如何度過這一階段,在這一階段積累了哪些經驗,現在幾乎都不記得了。也就是說,早期時候的代碼調試經驗,本書基本不具備,因為現在編寫代碼一般都是一次性通過,很少有語法問題,有問題也是隱藏得比較深的運行漏洞。另外,每個人的學習過程差異也很大。我們的作者中,有的英語很好,一看錯誤提示,很輕鬆就能解決問題。有的則靠詞典,一個一個地解決,C語言編寫了一學期,英語水準卻提高了不少,這是一種積極的副作用。
其次,每一個專業的程式員,到一定的時候,都只專注於自己的問題領域。雖然我們也邀請了高校教師、其他領域程式員參與到本書的創作中來,但C/C++應用面極廣,難免有些見解有所偏頗,盡信書則不如無書,當你通過本書完成階段性過渡後,需要放下本書,尋找新的幫助。
還有一種C++程式設計學習觀點,在面向對象時代,應該先建立面向對象的開發思想,直接學習C++。假如工作需要進入嵌入式開發領域,再學習C語言。這種先建立面向對象,然後學習面向過程的思路,我們有一定程度的認同。一方面,我們都是先學習了C語言,然後再學習C++,這方面經驗比較豐富。另一方面,我們調研發現,絕大多數高校,依然是保持先學習面向過程的C語言,然後學習面向對象開發語言的教學過程,所以,本書按照大多數讀者的學習模式設計。如果您恰好是先學習的C++,我們建議您先從本書第4篇開始學起。
另外,本書的大多數作者沒有在大學課堂教學的經驗,有些講解方法,可能沒有考慮到讀者當前的客觀情況,如果你學習本書時有一些困惑,還請讀者和我們聯繫。
多人智慧勝一人
對於C/C++的學習,除圖書之外,我們認為,不斷的上機實踐是尤為重要的。沒有笨學生,只有懶學生。長期的堅持是非常重要的,這就看個人的毅力了。
一個比較好的建議是:如果你是在校的學生,建議你同時再找一個同學,和你一起學習C語言。根據經驗,如果有兩三個同樣愛好的同學一起學習。可以互相競爭、互相促進。而且,有了問題大家互相交流,學起來特別快。
當然,更主要的是靠自己,只是有些時候,旁觀者清,同學可能可以輕鬆地發現代碼中的問題所在,而我們卻要調試半天。
如果沒有同學或學長一起學習,在網上找一兩個牛人請教也特別重要。為了促進本書讀者的學習,我們特地在網上提供了一個讀者之間交流的QQ群:16900070。同時,在QQ群的共用檔中也提供一些免費的學習材料,作為本書的補充。歡迎讀者在學習過程中下載使用。
不積跬步,難行千
在十多年的程式設計學習與實踐過程中,有一個同學的經歷讓我特別感慨:“
大學時候有個同學,愛好編程。大四做畢業設計的時候,發現他水準比我們高一截。因為很多大程式編譯和調試的經驗,你不去幹,是明顯不會知道的。
有問題我一般都去問他,和他探討,當然,水準太低的問題他也不感興趣。
有一次我無聊說到這個開發提升過程,誇獎了他一下。他說,哪里,我只是把你們打遊戲的時間,用來寫代碼了。
你想想啊,其實我平均一周去三次機房。一學期只有20周比較有空,兩年也就80周,240次上機。再說,我家條件也不好,也不能保證我有更多的上機費用。
兩年前我發現學校機房的開放策略後,開始我只能去上機練習一下DOS命令,還有就是C語言書上的小案例。後來想開發一個壓縮小工具,不斷“折磨”自己,想代碼,練習,上機去測試,查資料,代碼越寫越長,水準才慢慢提高的。
你以為我天生就明白exe檔的原理啊,我也是看了多少書,做了很多次試驗才明白的。”
之所以感慨,因為他的水準提高經歷沒有什麼特別的,就是堅持每週上機3次罷了。但萬事貴在堅持,開始可能只能編寫一些小程式,只能驗證一下語法,但量變會產生質變,當你逐漸能快速地寫出數千行代碼的一個小專案,開發一個小工具。你就已經具備了專業程式員的潛質,你可以很輕鬆成為一個專業程式員了。
而這些不過是要求你按照一定的學習路線,一步一個臺階,堅持就是勝利。大多數時候,完美的學習計畫和一時的熱情,敵不過長期的堅持。
好了,現在方法有了,工具有了,學習材料有了。我們開始逐步來完成學習目標吧!
祝你成功!

 
  步驟一.
依據網路上的圖書,挑選你所需要的書籍,根據以下步驟進行訂購
選擇產品及數量 結 帳 輸入基本資料 取貨與付款方式
┌───────────────────────────────────────────────────┘
資料確定 確認結帳 訂單編號    

步驟二.
完成付款的程序後,若採用貨到付款等宅配方式,3~7天內 ( 例假日將延期一至兩天 ) 您即可收到圖書。若至分店門市取貨,一週內聯絡取書。

步驟三.
完成購書程序者,可利用 訂單查詢 得知訂單進度。

注意事項.
● 付款方式若為網路刷卡必須等" 2 ~ 3 個工作天"確認款項已收到,才會出貨.如有更改書籍數量請記得按更新購物車,謝謝。

● 大陸出版品封面老舊、磨痕、凹痕等均屬常態,除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。

● 部分書籍附贈配件(如音頻mp3或dvd等)已無實體光碟提供,需以QR CODE 連結至出版社提供的網站註冊並通過驗證程序,方可下載使用。

● 我們將保留所有商品出貨權利,如遇缺書情形,訂單未達免運門檻運費需自行負擔。

預訂海外庫存.
商品到貨時間須4週,訂單書籍備齊後方能出貨,如果您有急用書籍,建議與【預訂海外庫存】商品分開訂購。