首頁  >  文章  >  後端開發  >  c++基礎知識

c++基礎知識

angryTom
angryTom原創
2019-10-26 10:48:526011瀏覽

c++基礎知識

c 基礎

C 是一種中級語言,它是由Bjarne Stroustrup 於1979 年在貝爾實驗室開始設計開發的。 C 進一步擴充並完善了 C 語言,是一種物件導向的程式設計語言。 C 可運行於多種平台上,如 Windows、MAC 作業系統以及 UNIX 的各種版本。 C語言是過程導向的語言,C 在此基礎上增加了物件導向以及泛型程式設計機制,因此 C 更適合大中型程式的開發。然而,C 並沒有犧牲效率,如果不使用高階特性,它的效率和C語言幾乎沒有差異。

推薦學習:c 手冊教學

以下為大家整理了c 的基礎知識,希望對各位有幫助。

1、C 中的基本資料型別有哪些?

答案:3種型別:整數型、浮點型、void型。

2、整型有幾種形式,各種形式有什麼差別?

答案:整數型包含整數,字元和布林值的算術類型,依修飾符細分為13種形式,其主要差異體現在型別包含整數、長度、表示範圍幾個面向。

3、C 中有哪些常數?

答案:6種常數:整數常數、浮點型常數、字元型常數、字串常數、轉義字元常數、位址常數。

4、常數與變數有哪些差別?

答:(1)常數的值不可改變,變數的值可以改變;(2)常數在定義時必須初始化,變數在定義可以不初始化;(3)常數不可以尋址,其位址只可賦予常數指針,變數可以尋址;(4)常數有較高的編譯執行效率;

5、運算子有哪些分類?

答案:(1)依運算元區分:一元運算子、二元運算子、三元運算子;(2)依功能區分:算術運算子、關聯運算子、邏輯運算符、位元運算子、賦值運算子、自增自減運算子、箭頭運算子、條件運算子、sizeof運算子、逗號運算子。

6、自增自減前運算與後運算的差異?

答:前自增自減運算的優先權大於賦值運算子(=),後自增自減運算的優先權小於賦值運算符,後自增自減運算後表達式的值不會改變。

7、指標和變數的自增自減有什麼不同?

答案:變數的自增自減是改變變數的值,指標的自增自減是改變指標的指向位址。

8、什麼是左值、右值?

答案:變數是左值,可以在賦值語句的左邊;數字字面值是右邊值,不能被賦值。

9、變數有哪幾種初始化方式?

答案:2種:直接初始化;複製初始化。直接初始化更加靈活且執行效率更高。

10、變數的宣告和定義是什麼?

答:變數宣告的主要目的是表明變數的類型和名稱;變數定義的主要目的是分配儲存空間,它們有相同的時候。

11、C 中有哪幾種作用域?

答案:3種:全域作用域、局部作用域、語句作用域。

12、變數有哪幾種儲存類型?

答案:4種:自動型別、靜態型別、暫存器類型、外部型別。

13、C與C 有什麼不同?

答:C語言是結構化的程式語言,它是過程導向的,考慮的是實作過程;C 是物件導向的,考慮的是整個程式模型。

14、巨集定義與運算符的區別?

答案:巨集定義是C 的預處理指令之一,它是一個替換操作,不做計算和表達式求解,不佔記憶體和編譯時間。

15、虛函數與純虛函數的特徵?

答案:虛擬函數必須是基底類別的非靜態成員函數,其存取權限可以是protected或public;純虛函數是虛函數的子集,含有純虛函數的類別就是抽象類,它不能產生物件。

16、如何使用純虛函數?

答:純虛函數用來定義沒有意義的實現,用於抽象類別中需要交給衍生類別具體實現的方法。

17、什麼是指標?

答案:指標是用來儲存記憶體位址的變量,它指向單一物件的位址,除了void指標類型外,指標的資料類型與所指向位址的變數的資料類型需要保持一致。

18、const物件的指標和const指標的差別?

答案:const指標本身的值不可改變,但可以使用該指標修改它所指物件的值;const變數的指標不可以修改所指向的const變數的值,但指標本身可以被重新賦值。

19、陣列指標與指標陣列的差別?

答案:數組指標是指標變量,它指向一個數組;指標數組是一個只包含指標元素的數組,它的元素可以指向相同類型的不同物件。

20、什麼是函數指標?

答:函數指針是指向函數的儲存空間位址的指針,可以對函數指針進行賦值並透過函數指針來呼叫函數。

21、引用與值傳遞的差別?

答:值傳遞傳遞的是一個值的副本,函數對形參的運算不會影響實參的值;引用傳遞傳遞的是引用物件的記憶體位址,函數對形參的操作會影響實參的值,實參的值會隨著形參的值得改變而改變。

22、指標與引用的差別?

答案:(1)引用無須解引用,指標需要解引用;(2)引用在定義時被初始化一次,之後不可變,指標可變;(3)引用不能為空,指標可以為空;(4)程式為指標變數分配記憶體區域,而引用不需要分配記憶體區域,所以指標自增操作是指標變數的自增,引用自增操作是變數值的自增。

23、物件導向與過程導向的區別?

答:過程導向是一種以過程為中心的程式設計思想,以演算法驅動;物件導向是一種以物件為中心的程式設計思想,以訊息進行驅動。過程導向程式語言的組成:程式=演算法 資料;物件導向程式語言的組成:程式=物件 訊息。

24、物件導向的特徵是什麼?

答:面對物件的3個要素:封裝,繼承,多型。物件導向中所有物件都可以歸屬為一個類別。

25、類別與結構體有什麼差別?

答:(1)結構體儲存在堆疊中,類別的實例化可以儲存在堆疊中,也可以儲存在堆中;(2)結構體的執行效率比類別高;(3)結構體沒有析構函數,類別有析構函數;(4)結構體不可以繼承,類別可以繼承。

26、如何存取靜態成員?

答:靜態成員可以透過類別名稱直接調用,不需要建立類別的實例,也可以透過類別的實例進行調用,但底層仍然是透過類別名稱調用的,所以不推薦這種呼叫方法。類別的靜態方法只能存取類別的靜態成員。

27、什麼是多型?

答:多態就是將子類別物件賦給父類別變量,父類別變數在編譯期和運行期表現出不同的特性。

28、在C 中如何實現多態?

答案:多態有動態多型、靜態多型、函數多型和巨集多態等,我們常說的多態指的是動態多態,它是基於繼承機制和虛函數來實現的。

29、衍生類別與基底類別的轉換?

答案:衍生類別總是可以轉換為基底類別的參考型別;基底類別轉換為衍生類別需要在確定安全性的情況下使用強制轉換來實作。

30、什麼是虛成員,有什麼作用?

答案:虛擬函數的作用是實現動態聯編,程式發現虛函數名前的關鍵字virtual後,會自動將其作為動態聯編處理,即在程式執行時動態的選擇合適的成員函數。

31、C 覆蓋與隱藏概述?

答:(1)覆蓋指的是子類別和父類別中,存在函數名稱、參數均相同的函數,且父類別的該函數為虛擬函數;(2)隱藏指的是子類別與父類別中,存在函數名稱相同、參數不同的函數,此時無論父類別函數是否為虛函數,父類別函數都會被隱藏,或存在函數名稱、參數皆相同的函數,此時只有當父類別函數不為虛擬函數時,父類別函數才會被隱藏。

32、什麼是深拷貝與淺拷貝?

答:如果一個類別擁有資源,當這個類別的資源發生複製過程時,就叫做深拷貝;如果物件存在資源但在複製過程中並未複製資源就是淺拷貝。

33、什麼是拷貝建構函數,什麼時候呼叫?

#答案:拷貝建構子由編譯器呼叫來完成一些基於同一類別的其他物件的構建及初始化。有3種情況會使用拷貝建構函數:(1)一個物件以值傳遞的方式傳入函數體;(2)一個物件以值傳遞的方式從函數傳回;(3)一個物件需要透過另一個物件進行初始化。

34、什麼是型別轉換建構子?

答:一個類別的建構子只有一個參數,該參數型別不是為該類別型別而是其他類型,這個建構子就稱為型別轉換建構函數,它可以用來處理不同域的相同資料值。

35、C 支援參數個數不確定的函數嗎?

答案:C 可以透過隱藏參數機制來支援參數不確定的函數。

36、什麼是內聯函數?

答案:在類別宣告的內部宣告或定義的成員函數叫做內聯(inline)函數,在內聯函數內不允許有循環語句和switch語句。

37、引用形參與非引用形參的區別?

答:引用形參是將參數變數的位址來傳遞,可以透過函數對形參的呼叫來修改實參的值。

38、使用引用形參有什麼問題?

答:呼叫非const類型的引用形參,實參必須不是const型,二者型別應一致;當呼叫一個有const引用的形參函數時,如果實參不是一個變數或型別不符時,函數會建立一個無名的暫存變數用來儲存實參的值,並把這個形參當作該暫存變數的引用。

39、指標形參和引用形參有什麼不同?

答:指針形參是指函數的參數是指針,它不會像引用形參那樣透過函數呼叫影響實參的值,但是呼叫後它會修改實參的物件。程式中建議盡量少使用指針形參,這樣會使程式的可讀性下降。

40、什麼是靜態函數?如何使用靜態函數?

答案:靜態函數是用static修飾符修飾的函數,靜態函數沒有this指針,只能存取靜態變數。類別中如果函數呼叫的結果不會存取或修改任何物件資料成員,這樣的成員宣告為靜態成員函數比較好。

41、函數重載及作用域?

答案:函數重載是指在相同作用域下,具有相同名稱而不同參數列表的多個函數。

42、函數重載時如何實現實參的型別轉換?

答:當函數重載匹配時,先透過標準轉換來實現匹配,如果不行,再透過類別類型轉換來實現匹配。

43、什麼是函式模板?

答案:函數模板技術是指使用了模板技術定義了參數化類型的非成員函數,這使得程式能夠使用不同的參數類型呼叫相同的函數。

44、什麼是類別模板?

答案:類模板是使用模板技術的類,描述了能夠管理其他資料類型的通用資料類型。類別模板技術通常用於建立包含其他類型的容器類別(佇列、鍊錶、堆疊等)。

45、什麼是泛型程式設計?

答:泛型程式設計就是以獨立於特定類別實作的方式編寫程式碼,針對不同的型別提供通用的實作。

46、C 如何實作泛型程式設計?

答案:C 中泛型程式設計的實作是使用C 中的模板技術來實現的,主要是設計函數模板和類別模板。

以上是c++基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn