C++面向對象筆記(1):起航篇(C++新增基礎知識)

1.數據類型

C++新增了bool類型。

在這裏插入圖片描述

2.const與指針類型

const使用對比1,修飾 指針/常量 對比:

//1和2等價
const int *p = NULL;// p是指針,const對指針進行修飾,將限制通過指針修改p指向的數據;故不能通過此指針修改其指向的數據的值。
int const *p = NULL;

int * const p = NULL;// p是常量,然後int *將常量修飾爲指針,則整體爲指針常量;故不能修改指向。

const使用對比2:

// 完全等價
const int * const p = NULL;
int const * const p = NULL;

// 示例1
const int x = 3;
const int * const p = &x;// int * const p是常量指針,指向const int這個整型常量

p = &y;// 錯誤
*p = 4;// 錯誤
x = 5;// 錯誤

// 示例2
int x = 3;// 這裏不用const修飾
const int * const p = &x;

p = &y;// 錯誤
*p = 4;// 錯誤
x = 5;// 正確
// 引用也是一樣的情況,如果x不用const修飾,則直接通過x修改是可以的。

在聲明變量和其指針時,const的使用:

// 錯誤1,無法通過編譯
const int x = 3;
int *y = &x;

// 正確1
int x = 3;
const int *y = &x;

// 正確2
const int x = 3;
const int *y = &x;

我們也可以用權限範圍對此進行理解:

const使用對比1,對比2 的代碼註釋中有寫對const和*修飾的作用,。

我們先看上方正確1 的代碼,我們可以直接使用x進行寫、讀操作(修改/獲取數據),但是y因爲有const修飾,所以只能通過y進行讀操作(獲取數據)。顯然,x的權限範圍 大於 y的權限範圍,所以這裏可以將&x賦給y。

再來看正確2 ,x只能進行讀操作,y也只能進行讀操作,x的權限範圍 等於 y的權限範圍,所以這裏也是正確的。

最後看錯誤1 的代碼,x只能進行讀操作,但y能進行讀、寫操作。x的權限範圍 小於 y的權限範圍,所以&x是無法賦給y的,故這種寫法一定是錯誤的。

3.const與引用(&)

int x = 3;
const int &y = x;// y爲x,const修飾引用,將限制通過引用修改其指向的數據;故不能通過y修改它指向的數據的值。

x = 10;// 正確
y = 20;// 錯誤

4.函數參數默認值

函數的參數列表:

// 正確
void fun(int i, int j = 5, int k = 10);

// 錯誤,k沒有默認值,不應該放在最右邊
void fun(int i, int j = 5, int k);

注意:有默認參數值的參數,必須在參數表的最右端

聲明和定義:

// 聲明
void fun(int i, int j = 5,int k = 10);
// 定義
void fun(int i, int j, int k){
    cout << i << j << k;
}

注意:在聲明中寫默認值即可,如果寫在定義中,有的編譯器可能會無法通過。

5.函數重載

相同作用域內,用同一個函數名定義的多個函數,參數個數參數類型不同。

6.內聯函數-inline

效率高,適合頻繁調用的函數,不過有條件。

要求邏輯簡單(不能有for等循環體)、不能是遞歸函數。

對編譯器來說inline是建議性的,是否編譯成內聯函數還是由編譯器根據情況決定的。

故,內聯可以說只是一種編譯的方式。

7.內存管理

和C語言對比:

// C
void *malloc(size_t size);
void free(void *memblock);

// C++
int *p = new int;
delete p;

注:new、delete是運算符。

塊內存操作:

int *arr = new int[10];
delect []arr;

[重要]內存分配有失敗的風險,所以需要驗證:

int *p = new int[1000];
if(NULL == p){
    // 內存分配失敗
}

[重要]內存釋放完畢,也需要將指針指向NULL,絕對不要留下野指針

// 1.內存申請和釋放
int *p = new int;
if(NULL == p){
    // 內存分配失敗
    // 異常處理
}
delete p;
p = NULL;// 務必這樣做!

// 2.塊內存申請和釋放
int *p = new int[1000];
if(NULL == p){
    // 內存分配失敗
    // 異常處理
}
delete []p;
p = NULL;// 務必這樣做!

獲取數組元素個數:

// C++中沒有現成的獲取數組元素個數的方法,只有自己寫。
int count = sizeof(array) / sizeof(array[0]);

本篇爲視頻教程筆記,視頻如下:

C++遠征之起航篇

C++遠征之離港篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章