-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
C++從入門到精通 版權信息
- ISBN:9787520823777
- 條形碼:9787520823777 ; 978-7-5208-2377-7
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>
C++從入門到精通 本書特色
培養編程思維,輕松玩轉C++! 內容全面:內容全面,講解細致,循序漸進,便于理解 視頻講解:掃碼觀看,通俗易懂,知識拓展,隨時隨地 輕松上手:大量示例,邊學邊練,輕松學習,快速提升
C++從入門到精通 內容簡介
本書系統講述了從入門到精通所必需的相關知識。全書共11章,主要分為三大部分。**部分(第1章)主要介紹C語言與C++語言的基本概念。第二部分(第2章到第4章)為C語言部分,主要介紹C語言的基本數據類型、運算符和表達式(第2章);面向過程思想的程序設計方法,包括程序結構設計與控制方法、預處理命令和C語言操作(第3章);函數的定義和函數模板使用方法(第4章)。第三部分(第5章到第11章)為C++語言部分。主要介紹類和對象的基本概念、定義方法(第5章);對象的初始化和析構方法、對象數組和指針、靜態成員和友元等(第6章);第7章和第8章分別介紹了類的繼承和多態性;第9章可以看作類的多態性的一種表現(靜態多態性),主要介紹運算符重載的規則和方法;第10章重點介紹C++的輸入和輸出;第11章重點講解C++命名空間和異常處理機制。
C++從入門到精通 目錄
第1 章 C 語言與C++ 語言概述
1.1 C 語言概述
1.2 從C 語言到C++ 語言
1.3 入門的C 程序和C++ 程序
1.3.1 入門的C 程序
1.3.2 入門的C++ 程序
1.4 程序開發過程
1.4.1 分析問題
1.4.2 編輯程序
1.4.3 編譯程序
1.4.4 連接程序
1.4.5 運行并調試程序
本章習題
第2 章 數據類型、運算符和表達式
2.1 常量與變量
2.1.1 常量
2.1.2 變量
2.2 基本數據類型
2.2.1 整型數據
2.2.2 字符型數據
2.2.3 實型數據
2.3 數據的組合類型
2.3.1 數組類型
2.3.2 結構體類型
2.3.3 共用體類型
2.3.4 枚舉類型
2.3.5 類類型
2.3.6 定義類型別名
2.4 指針
2.4.1 內存和地址
2.4.2 指針變量
2.4.3 動態內存的分配和管理
2.5 基本運算符和表達式
2.5.1 賦值運算符和表達式
2.5.2 算術運算符和表達式
2.5.3 關系運算符和表達式
2.5.4 邏輯運算符和表達式
2.5.5 位運算符和表達式
2.5.6 條件運算符和表達式
2.5.7 逗號運算符和表達式
2.5.8 指針運算符和表達式
2.5.9 地址運算符和表達式
2.5.10 求字節運算符和表達式
2.5.11 強制運算符和表達式
2.5.12 下標運算符和表達式
2.5.13 自增與自減運算符
和表達式
2.6 運算符的優先級和結合性
本章習題
第3 章 基于面向過程思想的程序
設計方法
3.1 C 語言數據的輸入與輸出
3.1.1 字符數據的輸入與輸出
3.1.2 格式的輸出與輸入
3.2 順序結構程序設計
3.2.1 表達式和語句
3.2.2 順序結構程序舉例
3.3 選擇結構程序設計
3.3.1 if 語句
3.3.2 if-else 語句
3.3.3 多個if-else 語句
3.3.4 switch-case 語句
3.3.5 選擇結構程序舉例
3.4 循環結構程序設計
3.4.1 goto 語句
3.4.2 while 語句
3.4.3 do-while 語句
3.4.4 for 語句
3.4.5 嵌套循環語句
3.4.6 break 語句
3.4.7 continue 語句
3.5 預處理功能
3.5.1 宏定義
3.5.2 文件包含
3.5.3 條件編譯
3.6 C 語言的文件操作
本章習題
第4 章 函數
4.1 函數的聲明和定義
4.1.1 函數的聲明
4.1.2 函數的定義
4.2 函數的形參和實參
4.2.1 函數的形參和實參的概念
4.2.2 函數的形參和實參的類型
4.2.3 函數的缺省參數
4.2.4 函數參數的傳遞方式
4.3 函數的返回值
4.4 函數的調用
4.4.1 函數調用的一般格式
4.4.2 函數調用的方式
4.4.3 函數的嵌套和遞歸調用
4.5 函數指針
4.5.1 函數的地址和指向函數的指針
4.5.2 函數指針的使用
4.6 函數重載
4.7 函數模板
4.7.1 函數模板的概念
4.7.2 函數模板的使用
本章習題
第5 章 類和對象
5.1 從結構體到類
5.2 類的定義以及類的成員
5.2.1 類的數據成員
5.2.2 類的成員函數
5.2.3 類成員的訪問屬性
5.3 類對象的定義和使用
5.3.1 對象的概念
5.3.2 定義對象的方法
5.3.3 類對象的使用方法
5.4 類的封裝性
5.4.1 公用接口與私有實現的分離
5.4.2 類的封裝性舉例
本章習題
第6 章 深入類和對象
6.1 對象的初始化
6.2 構造函數
6.2.1 構造函數的作用
6.2.2 帶參數的構造函數
6.2.3 帶默認參數的構造函數
6.2.4 參數初始化表的構造函數
6.2.5 構造函數的重載
6.3 析構函數
6.3.1 析構函數的作用
6.3.2 析構函數的實現
6.4 調用構造函數和析構函數的時機與順序
6.4.1 調用構造函數
6.4.2 調用析構函數
6.5 對象數組和指針
6.5.1 對象數組的定義和初始化
6.5.2 指向對象的指針
6.5.3 this 指針
6.6 對象的動態建立和釋放
6.7 對象的賦值和復制
6.7.1 對象的賦值
6.7.2 對象的復制
6.8 靜態成員
6.8.1 靜態數據成員變量
6.8.2 靜態成員函數
6.9 友元
6.9.1 友元函數
6.9.2 友元類
6.10 類模板
本章習題
第7 章 類的繼承和派生
7.1 繼承和派生的概念
7.2 派生類的聲明方式
7.3 派生類的構成
7.4 派生類成員的訪問屬性
7.4.1 公用繼承
7.4.2 私有繼承
7.4.3 受保護繼承
7.5 派生類的構造函數和析構函數
7.5.1 簡單派生類的構造函數
7.5.2 有子對象的派生類構造函數
7.5.3 多級派生類的構造函數
7.5.4 派生類的析構函數
7.6 多重繼承
7.6.1 多重繼承的聲明方式
7.6.2 多重繼承的構造函數
7.6.3 多重繼承產生的二義性
7.7 虛基類
7.7.1 虛基類的定義方法
7.7.2 虛基類的初始化
7.7.3 虛基類舉例
7.8 基類和派生類的轉換關系
本章習題
第8 章 類的多態性
8.1 多態性的概念和表現形式
8.1.1 多態性的概念
8.1.2 多態性的表現形式
8.2 虛函數
8.2.1 虛函數的作用
8.2.2 虛函數的應用
8.3 純虛函數與抽象基類
8.3.1 純虛函數
8.3.2 抽象基類
8.4 虛析構函數
本章習題
第9 章 運算符重載
9.1 運算符重載的含義
9.2 運算符重載的規則
9.3 運算符重載的方法
9.3.1 運算符重載函數作為類的
成員函數
9.3.2 運算符重載函數作為類的友元函數
9.4 重載單目運算符
9.5 重載流插入運算符和重載流提取運算符
9.5.1 重載流插入運算符
9.5.2 重載流提取運算符
9.6 不同類型間數據的轉換
9.6.1 標準類型間的數據轉換
9.6.2 轉換構造函數
9.6.3 類型轉換函數
本章習題
第10 章 C++ 的輸入/ 輸出
10.1 標準輸入流
10.1.1 cin 流
10.1.2 istream 成員函數
10.2 標準輸出流
10.2.1 標準輸出流對象cout
10.2.2 cerr 和clog 流對象
10.2.3 ostream 成員函數
10.3 文件流與文件操作
10.3.1 文件流與文件流類
10.3.2 文件的打開和關閉
10.3.3 文件操作
本章習題
第11 章 命名空間和異常處理
11.1 命名空間
11.1.1 命名空間的含義
11.1.2 命名空間的作用
11.1.3 標準命名空間
11.1.4 自定義命名空間
11.2 異常處理
11.2.1 常見錯誤分析
11.2.2 程序調試
11.2.3 異常處理的方法
本章習題
習題答案
C++從入門到精通 節選
2.4 指針 2.4.1 內存和地址 可以將計算機中的內存比作一棟樓房,每間房屋能夠存儲數據,并由房間號確定標識。而計算機中的內存由數億個位組成,一位能存儲值0 和1,但是一位表示的范圍有限,所以單獨談一位沒有實際意義。一般來講,使用多個位為一組構成一個單位,就可以存儲較大范圍的值。每一個單位為一個字節,它包含存儲一個字符需要的位數。在目前的許多計算機中,一個字節由8 個位構成,能存儲無符號值0~255。為了存儲更大的值,我們把兩個或多個字節合在一起,作為一個更大的內存單位。例如:許多計算機以字節為單位存儲整數,每個字一般由2 個或4 個字節組成,即常用的int 等類型。假如記住一個值的存儲地址,就可以按照此地址取得一個值。 2.4.2 指針變量 指針是一個數據在內存中的地址,指針變量就是存放地址的變量。在C 語言中,指針變量是保存變量的地址,我們可以訪問指針變量保存的地址值。指針變量的值為數據的地址,包括數組、字符串、函數、普通變量等。例如:在一個char 類型的變量a 中,存儲一個字符a,其ASCII 碼為65,占用地址為0X11A 的內存。除此之外,還存在另一個指針變量p,其值也是0X11A。這種情況就稱p 指向a,也可以說p 為指針變量a 的指針。 1. 定義指針變量 定義指針變量和定義普通變量大致相同,都是變量名前面加星號(*),格式如下: datatype *name; 或者 datatype *name=value; // 這里的“*”表示指針變量,“datatype”表示該指 針所指向的數據類型,value 為變量的地址值,通常情況下用取地址符獲取變量地址 int a=10; int *p_a=&a; “p_a”是一個指向int 類型的指針變量,在定義指針變量“p_a”的同時對它進行 初始化,并將變量“a”的地址賦予它,此時“p_a”就指向了“a”。值得注意的是,“a” 前面必須要加取地址符(&),否則是錯誤的。 指針變量也可以連續定義,例如: int *a,*b,*c; //a、b、c 的類型都是int* 第2 章 數據類型、運算符和表達式 2. 通過指針變量取得數據 指針變量存儲了數據的地址,通過指針變量能夠獲得該地址的數據,格式為: *pointer; 此處的“*”為指針運算符,用來取得某個地址上的數據,如例2.13 所示。 【例2.13】利用指針輸出a 的值。 相應代碼如下: #include int main() { int a=5; int *p=&a; printf ("%d,%d\n",a,*p); // 兩種方法都輸出a 的數值 return 0; } 程序運行結果為: 5, 5 知識點撥:假設“a”的地址是“0X1111”,“p”指向“a”后,“p”本身的值變為“0X1111”。“*p”表示獲取地址“0X1111”的數據,即變量“a”的值。從運行結果看,“*p”和“&a”是等價的。 【例2.14】通過指針交換兩個變量a、b 的值。 相應代碼如下: #include int main() { int a=1,b=10,temp; int *pa=&a,*pb=&b; printf ("a=%d,b=%d\n",a,b); temp=*pa; // 將a 的值先保存起來 *pa=*pb; // 將b 的值交給a,將保存起來的a 值交換給b *pb=temp; // 將保存起來的a 值交換給b,結束交換 printf ("a=%d,b=%d\n",a,b); return 0; } 程序運行結果為: a=1, b=10 a=10, b=1 知識點撥:通過運行結果可以看出,a、b 的值已經發生了交換。需要注意的是臨時變量“temp”的使用,執行“*pa=*pb;”語句后,“a”的值會被“b”的值覆蓋。因此,如果不預先將“a”的值保存起來,之后“a”的值就會被覆蓋。 3. 一維數組和指針 從本質上來說,一維數組元素也是一個變量,也有自己的地址,因此完全可以定義指向一維數組元素的指針。 例如: int a[10],*p,*q; p=&a[0]; q=&a[3]; 以下語句定義了一個指向一維數組的指針變量: int a[10],*p; p=a; 注意:在C 語言中,數組名即為數組的首地址。此外,在一個一維數組中,無論一個元素占用多少內存,如果一個指針“p”指向一維數組中的一個元素,那“p+1”總會指向數組中的下一個元素。 【例2.15】指針加減整數。 相應代碼如下: #include int main() { int a[10],*p=&a[5]; // 定義數組,命名指針變量 printf ("p=%p\n",p); printf ("p+1=%p\n",p+1); // 對p 進行加操作 printf ("p-1=%p\n",p-1); // 對p 進行減操作 return 0; } 程序運行結果為: p=0019FF1C p+1=0019FF20 p-1=0019FF18 知識點撥:例2.15 中的程序定義了長度為10 的數組,然后命名了指針變量“*p”。對“p”進行加減操作,實際上改變了地址值。如果“a”是一個一維數組,那么“a+i”就是數組元素“a[i]”的地址(等價于“&a[i]”),而“a+i”就代表數組元素“a[i]”。如果“a”是一個一維數組,而指針變量“p”指向“a[0]”,那么“p+i”就是數組元素“a[i]”的地址,而“*(p+i)”就代表數組元素“a[i]”。 【例2.16】鍵盤輸入10 個數并逆序輸出。 相應代碼如下: #include int main() { int a[10],*p=a,i; // 初始化數組 printf (" 輸入10 個數: "); for(i=0;i=0;i--) printf("%2ld ",*(p+i)); // 等價于printf ("%d",a[i]) return 0; } 程序運行結果為: 輸入10 個數: 1 2 3 4 5 6 7 8 9 0 逆序后: 0 9 8 7 6 5 4 3 2 1 知識點撥:在例2.16 的程序中,為了訪問不同的數組元素,改變的不是指針變量“p”的值,而是整型變量“i”的值。雖然“p”是一個指針變量而不是一個數組,但是C 語言允許將指針形式的“*(p+i)”表示為數組元素形式的“p[i]”,從而允許數組指針“p+i”表示為“&p[i]”。 4. 指針變量作為函數參數 在C 語言中,函數的參數不限于整型、實型或字符型等數據類型,也可以是指針類型。指針類型的函數參數意義為:將主調函數中的變量地址傳遞到被調函數中,從而實現變量的函數間接引用。 【例2.17】利用函數交換a、b 的值。 相應代碼如下: #include void swap(int *m,int *n) // 定義交換函數 { int temp; temp=*m; // 等價于temp=m; *m=*n; // 等價于m=n; *n=temp; // 等價于n=temp; } int main() { int a,b; printf (" 輸入兩個整數: "); scanf("%d%d",&a,&b); printf (" 交換前: a=%d,b=%d\n",a,b); swap(&a,&b); printf (" 交換后: a=%d,b=%d\n",a,b); // 輸出交換后的值 return 0; } 程序運行結果為: 輸入兩個整數: 3 5 交換前: a=3, b=5 交換后: a=5, b=3 知識點撥:在例2.17 的程序中,首先將主調函數中的局部變量的地址傳遞到被調函數中,之后在被調函數中對主調函數中的局部變量進行間接引用,這在實質上是一種跨函數的間接引用。關于函數的具體介紹參見第4 章。 2.4.3 動態內存的分配和管理 1. malloc 函數 函數聲明:void *malloc(size_t Size) 所在文件:stdlib.h 參數:size_t Size(Size 表示要申請的字節數) 返回值:void *( 成功則返回“指向申請空間的指針”,失敗則返回NULL) 函數功能:申請Size 個字節的堆內存并返回內存空間首地址malloc 函數根據參數指定的尺寸來分配內存塊,并且返回一個void 型指針,指向新分配的內存塊的初始位置。如果內存分配失敗(內存不足),則函數返回NULL。如分配100 個int 類型的空間: int* p=(int *) malloc ( sizeof (int) * 100 ); 2. free 函數 函數聲明:void f ree(void *p) 所在文件:stdlib.h 參數:void *p( 指向堆內申請的合法空間) 返回值:void 功能:釋放手動申請的堆內合法內存空間 例如: int* p=(int *) malloc(4); *p=100; f ree(p); // 釋放 p 所指的內存空間 以下是關于malloc 和free 的使用例子: #include "stdio.h" #include "stdlib.h" #def ine SIZE 3 int main() { int *pt=NULL; // 使用malloc() 申請空間 pt=(int*)malloc(SIZE * sizeof (int)); // 判斷是否申請成功,若申請失敗,則提示退出 if (pt==NULL) { printf (" 內存未申請成功"); return 0; } for (int i=0; i “+”(單目)>“-”(單目)>“*”>“/”>“+”>“-”(關于運算符優先級詳細介紹請見第2.6 節的內容)。只有單目運算符“+”“-”的結合性是從右到左的,其余運算符的結合性都是從左到右的,例如“(a+b)*c/a”的結果為6,而“d2=a+b*c/a”的結果為7。“a/c”結果為1.5,但是d3 類型為int 型,因此,結果為1。a 對c 取余的結果為1,因此,“a%c=1”。 2.5.3 關系運算符和表達式 關系運算符都是雙目運算符,其結合性均為左結合。關系運算符的優先級低于算術運算符,高于賦值運算符。在6 個關系運算符中,“”“>=”的優先級相同,高于“==”和“!=”,“==”和“!=”的優先級相同。由關系運算符組成的式子為關系表達式,如“a>b”即為關系表達式。在C 語言中,同邏輯表達式一樣,關系表達式的值也為邏輯值,即布(bool),取值為真或假。 注意:在C 語言中,“==”表示等于,而“=”表示賦值。如果要做判斷,需要 使用“==”。 如語句: if (a==1) {…} 表示判斷是否滿足條件“a==1”,如果滿足則進行{} 中的處理,是典型的判斷語 句。但是,如果寫成: if (a=1) {…} 則表示給“a”賦值為1。程序將不做判斷,直接進行“{}”中的處理。初學C++ 時, 很容易混淆“==”和“=”,大家需要格外注意。 2.5.4 邏輯運算符和表達式 邏輯運算符主要有3 種:并且、或者和相反。 (1)并且:邏輯為與,操作符為“&&”,表示兩者都成立。 (2)或者:邏輯為或,操作符為“||”,表示只要兩個其中的一個條件成立即可。 (3)相反:邏輯為非,操作符為“!”,表示(如果)之前成立,現在就不成立;(如果)在之前不成立,那么現在就成立。 邏輯表達式的值與關系表達式的值一樣,結果成立為1,不成立為0。在C 程序 里面,用0 表示不成立,用除0 之外的任何數表示成立。 邏輯運算符的優先級為“!”>“ &&”>“ ||”。 2.5.5 位運算符和表達式 位運算符主要有6 種:按位與(&)、按位或(|)、異或(^)、取反(~)、右移(>>)、左移(<<)。 1. 按位與運算符 按位與運算符(&)進行的是這樣的算法:0&0=0,0&1=0,1&0=0,1&1=1。 【例2.19】利用按位與運算符輸出結果。 相應代碼如下: #include int main() { int a=4; int b=5; printf("%d",a&b); } 程序運行結果為: 4 知識點撥:a=4 的二進制表示a=(0100)2,b=5 的二進制表示b=(0101)2,a&b=(0100)2,換算成十進制數為4。 2. 按位或運算符 按位或運算符(|)進行的是這樣的算法:0|0=0,0|1=1,1|0=1,1|1=1。 【例2.20】利用按位或運算符輸出結果。 相應代碼如下: #include int main() { int a=060; int b=017; printf ("%d",a|b); } 程序運行結果為: 63 知識點撥:在C 語言中,如果一個整型是以0 開頭的,那么它就是一個八進制數。如果是以0x 開頭的,那么它就是一個十六進制數。此處的a 和b 都是八進制數。如果換算成二級制數a=(0110000)2, b=(0001111)2。a|b=(0111111)2,換算成十進制數為63。 3. 異或運算符 異或運算符(^)進行的是這樣的算法:0^0=0,0^1=1,1^0=1,1^1=0(相同為0,不同為1)。
C++從入門到精通 作者簡介
高明亮,山東臨朐人,2013年畢業于四川大學通信與信息系統專業,獲工學博士學位。現任山東理工大學電氣與電子工程學院副教授,碩士生導師。主要從事計算機視覺、深度學習方面的研究工作。主講高級程序設計語言、數字圖像處理技術、信息論與編碼等課程。
- >
史學評論
- >
羅庸西南聯大授課錄
- >
回憶愛瑪儂
- >
月亮虎
- >
企鵝口袋書系列·偉大的思想20:論自然選擇(英漢雙語)
- >
龍榆生:詞曲概論/大家小書
- >
大紅狗在馬戲團-大紅狗克里弗-助人
- >
莉莉和章魚