C 學習之各種區別對比

2021-10-18 15:51:53 字數 3617 閱讀 5141

6、應用場景

7、struct和class的區別

8、define和const的區別(編譯階段、安全性、記憶體占用等)

9、在c++中const和static的用法(定義,用途)

10、const和static在類中使用的注意事項(定義、初始化和使用)

11、計算下面幾個類的大小

12、c++的stl介紹

13、stl原始碼中的hash表的實現

14、stl中unordered_map和map的區別

15、stl中vector的實現

16、c++中的過載和重寫(覆蓋)的區別:

17、c++記憶體管理

18、指標和陣列的對比

19、呼叫函式申請空間

在使用的時候new和delete搭配使用,malloc和free搭配使用

struct和class都可以自定義資料型別,也支援繼承操作

struct a

;classb:a

;//private繼承

struct c:b

;//public繼承

//例子

#include

using

namespace std;

classa}

;struct b: a};

class

c: b

;int

main()

static定義靜態變數,靜態函式

static靜態成員變數:

//***********例子*******************//

class

base

;有疑惑????????????????

//??????????????????????????????

//*****************例子***********************

class

base

;

static靜態成員函式

const成員變數

const成員函式

const static

如果要想成員變數在整個類中都是恆定的常量,應該用類的列舉常量或者static const。

在類中進行宣告,在類外進行初始化(類似於類的靜態常量)

類本身沒有大小,這裡的類的大小是指:類的物件所佔的大小。

#include

using

namespace std;

class

a//普通成員函式

void

fun()}

;//普通資料成員

classb;

//虛函式

classc}

;//結構體對齊原則

classd}

;int

main()

classa}

;問:a a =

1;是否正確, 如果正確, 那麼它呼叫了哪些函式?,

這裡會進行隱式轉化 a a(1

).implicit

正確這類題目更常見的是在基類和子類有不同實現方法。(虛函式相關,例子很多,不多說了)

hashtable是採用開鏈法來完成的(vector + list)

vector是乙個動態陣列,底層實現是一段連續的線性記憶體空間。

c++記憶體分為:棧、堆、自由儲存區、全域性/靜態儲存區、常量區。

堆和自由儲存區的區別

1、字元陣列的內容可以改變,字元指標的內容不可以改變

char a=

"hello";a[

0]='l'

;cout << a << endl;

char

*p =

"world"

;//p指向常量字串p[0

]='h';

//執行出錯

2、字元陣列之間不能賦值,不能直接用比較運算子直接比較,若進行賦值呼叫 strcpy() 函式,若進行比較呼叫 strcmp() 函式;

char a=

"hello"

;char b[10]

;strcpy

(b, a)

;//不能用b = a;if(

strcmp

(a, b)==0

)//不能用a==b

cout <<

"endl"

;

3、運算子 sizeof 可以計算出字元陣列的容量,但是計算字元指標時,得到的是指標變數所占用的空間,而不是指標所指向空間的大小

char a=

"hello"

;char

*p = a;

cout <<

sizeof a << endl;

//6位元組

cout <<

sizeof p << endl;

//8位元組(64位)

4、當陣列作為引數傳遞時,陣列會自動退化為指標

void

fun(

char a[

100]

)

1、指標作為函式的引數傳遞

void

getmemory

(char

*p,int num)

void

test

(void

)

上述程式出錯的原因在於:呼叫函式時,傳遞的是變數的值「值傳遞」,在 getmemory 函式內部改變的是引數 p 的副本,並不會影響引數 p 本身,也就是說 str 並沒有獲得記憶體。這樣程式最終會導致記憶體洩漏,呼叫 getmemory 函式多少次,就會出現多少次記憶體洩漏,因為在函式內部只動態申請了記憶體,並沒有用 free 釋放掉動態記憶體空間。

如果想要通過這種方式申請空間,將 getmemory 函式的形參改為「指向指標的指標」

void

getmemory2

(char

**p,

int num)

void

test2

(void

)

SVN與GIT區別對比

1 svn優缺點 優點 1 管理方便,邏輯明確,符合一般人思維習慣。2 易於管理,集中式伺服器更能保證安全性。3 一致性非常高。4 適合開發人數不多的專案開發。缺點 1 伺服器壓力太大,資料庫容量暴增。2 如果不能連線到伺服器上,基本上不可以工作,看上面第二步,如果伺服器不能連線上,就不能提交,還原...

post和get區別對比

post和get區別 標準答案 get在瀏覽器回退時是無害的,而post會再次提交請求。get產生的url位址可以被bookmark,而post不可以。get請求會被瀏覽器主動cache,而post不會,除非手動設定。get請求只能進行url編碼,而post支援多種編碼方式。get請求引數會被完整保...

axios 和 fetch 區別對比

axios axios then function response catch function error axios 是乙個基於promise 用於瀏覽器和 nodejs 的 http 客戶端,本質上也是對原生xhr的封裝,只不過它是promise的實現版本,符合最新的es規範,它本身具有以下...