C++基本知識

1.C和C++的主要區別是什麼?程序員

答:1.C++語言包括過程性語言部分和類部分,過程性語言部分與C並沒有本質的差異,類部分是C語言中所沒有的,它是面向對象程序設計的主體。編程

2.程序設計方法上已從結構化程序設計走向面向對象程序設計了.數組

2.結構程序設計和麪向對象程序設計的概念函數

結構化程序設計的主要思想是功能分解並逐步求精。數據與程序分開存儲,編程的主要技巧在於追蹤哪些函數調用哪些函數,哪些數據發生了變化。佈局

面向對象程序設計的本質是把數據和處理數據的過程當成一個總體----對象。(對象是一種特殊變量----像結構體變量、又增長了相關的操做行爲)this

面向對象程序設計的實現須要封裝和數據隱藏技術、繼承和重用技術、多態性技術。設計

3.什麼是類和對象?指針

類是一組性質相同的對象的程序描述,它由歸納了一組對象共同性質的數據和函數組成。是封裝的基本單元.code

對象是構成世界的一個獨立單位,它具備本身的靜態特徵(狀態)和動態特徵(操做)。靜態特徵便可以用某種數據來描述的特徵,動態特徵即對象所表現的行爲或對象所具備的功能。對象

類與對象的關係:類給出了屬於該類的所有對象的抽象定義,而對象則是符合這種定義的一個實體。因此,一個對象又稱做類的一個實例(instance)。對象是類的實例,類定義了屬於該類的全部對象的共同特性。

4. 面向對象程序設計的三大特徵是什麼?

1.封裝(encapsulation): 封裝是面向對象方法的一個重要原則。它有兩個涵義:第一個涵義是,把對象的所有屬性和所有服務結合在一塊兒,造成一個不可分割的獨立單位(即對象)。第二個涵義也稱做「信息隱蔽」,即儘量隱蔽對象的內部細節,對外造成一個邊界(或者說造成一道屏障),只保留有限的對外接口使之與外部發生聯繫。這主要是指對象的外部不能直接地存取對象地屬性,只能經過幾個容許外部使用地服務與對象發生聯繫。

2.繼承(inheritance): (單繼承和多繼承)子類能夠繼承父類中的屬性和操做,也能夠定義本身的屬性和操做

3.多態性(polymorphism):在通常類中定義的屬性或操做被特殊類繼承以後,能夠具備不一樣的數據類型或表現出不一樣的行爲。這使得同一個屬性或操做名在通常類及其各個特殊類中具備不一樣的語義。

5.類的組成:

class是定義類的關鍵字。<類名>是一個標識符,用於唯一標識一個類。一對大括號內是類的說明部分,說明該類的全部成員。類的成員包括數據成員和成員函數兩部分。類的成員從訪問權限上分有如下三類:公有的(public)、私有的(private)和保護的(protected),其中默認爲private權限。

1.公有的成員能夠被程序中的任何代碼訪問;

2.私有的成員只能被類自己的成員函數及友元類的成員函數訪問,其餘類的成員函數,包括其派生類的成員函數都不能訪問它們;

3.保護的成員與私有成員相似,只是除了類自己的成員函數和說明爲友元類的成員函數能夠訪問保護成員外,該類的派生類的成員也能夠訪問。

6.結構體和類的區別是什麼?

結構和類的惟一區別是:在未指定訪問權限時,結構中的成員被默認爲公有的而類中的成員被默認爲私有的。

7.類對象的定義方法和對象成員的表示方法

對象的定義方法: <類名><對象名錶>;

對象成員的表示方法:<對象名>.<成員名>這裏的「.」是一個運算符,該運算符的功能是表示對象的成員。或者指向對象的指針的成員表示以下:<對象指針名>-><成員名>

8.構造函數和析構函數

(1)構造函數是一種用於建立對象特殊的成員函數,當建立對象時,系統自動調用構造函數,不能在程序中直接調用。構造函數名與類名相同,一個類能夠擁有多個構造函數(重載),構造函數能夠有任意類型的參數,但不能具備返回類型。

(2)析構函數名字爲符號「~」加類名,析構函數沒有參數和返回值。一個類中只可能定義一個析構函數,因此析構函數不能重載。默認析構函數是一個空函數

(3)使用構造函數的限制:不能被繼承,不能說明爲虛函數,不能顯式調用,不能取構造函數的地址。

9.C++程序的內存佈局

C++程序的內存格局一般分爲四個區:

(1)全局數據區(data area):存放全局變量、靜態數據、常量。

(2)代碼區(code area):存放類成員函數、其餘函數代碼。


(3)棧區(stack area):存放局部變量、函數參數、返回數據、返回地址。

(4)堆區 (heap area) :自由存儲區。

10.拷貝構造函數

當構造函數的參數爲自身類的引用時,這個構造函數稱爲拷貝構造函數。拷貝構造函數的功能是用一個已有對象初始化一個正在創建的同類對象。

11.this指針

當一個成員函數被調用時,自動向它傳遞一個隱含的參數,該參數是一個指向這個函數成員所在的對象的指針。成員函數中能夠用this關鍵字來引用該指針。this指針的類型就是成員函數所屬的類的類型。當調用成員函數時,它被初始化爲被調用函數所在的類實例的地址。

this指針只能在類的成員函數中使用,它指向該成員函數被調用的對象。this指針通常用於返回當前對象自身。this指針大量用於運算符重載成員函數設計中。靜態成員函數沒有this指針。

12.運算符重載

運算符的重載形式有兩種:重載爲類的成員函數和重載爲類的友元函數。

<函數類型> operator <運算符>(<形參表>)或friend <函數類型> operator <運算符>(<形參表>)

當運算符重載爲類的成員函數時,函數的參數個數比原來的運算數個數要少一個(後綴++、--除外);當重載爲類的友元函數時,參數個數與原運算數的個數相同。

單目運算符最好重載爲成員函數,而雙目運算符則最好重載爲友元函數。

在C++中,單目運算符有++和--(後綴有一個int型的參數,而前綴沒有)

13. C++中函數重寫和重載有何區別?

重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有 相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。若是在一個類中定義了多個同名的方 法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是能夠改變返回值的類型。


繼承方式

基類特性

派生類特性

公有繼承


Public

Public

Protected

Protected

Private

Private

私有繼承


Public

Private

Protected

Private

Private

不可訪問

保護繼承


Public

Protected

Protected

Protected

Private

不可訪問

14.繼承的基本知識

①單繼承的定義格式以下:

class<派生類名> :<繼承方式><基類名>

{     public:members;//派生類新定義成員

Private:members;

Protected:members;

};


(1)在公有繼承時,派生類的對象能夠訪問基類中的公有成員;派生類的成員函數能夠訪問基類中的公有成員和保護成員。這裏,必定要區分清楚派生類的對象和派生類中的成員函數對基類的訪問是不一樣的。

(2)在私有繼承時,基類的成員只能由直接派生類訪問,而沒法再往下繼承。

(3)對於保護繼承方式,這種繼承方式與私有繼承方式的狀況相同。二者的區別僅在於對派生類的成員而言,對基類成員有不一樣的可訪問性。

(4)對於基類中的私有成員,只能被基類中的成員函數和友元函數所訪問,不能被其餘的函數訪問。

②派生類對基類成員能夠有不一樣的訪問方式:

派生類能夠覆蓋基類成員

派生類不能訪問基類私有成員

基類的公有段和保護段成員訪問權對派生類保持不變(公有繼承)

基類的公有段和保護段成員成爲派生類的私有成員(私有繼承)

③單繼承中的構造函數和析構函數

A.構造函數不可以被繼承。派生類構造函數的調用順序以下:

(1)調用基類的構造函數,調用順序按照它們繼承時說明的順序。

(2)調用子對象類的構造函數,調用順序按照它們在類中說明的順序。

(3)派生類構造函數體中的內容。

B.析構函數也不能被繼承,所以在執行派生類的析構函數時,基類的析構函數也將被調用。執行順序是先執行派生類的析構函數,再執行基類的析構函數,其順序與執行構造函數時的順序正好相反。

④賦值兼容規則

(1)       派生類的對象能夠賦值給基類的對象。

(2)       派生類的對象能夠初始化基類的引用

(3)       派生類的對象的地址能夠賦給指向基類的指針。

15.多態性與虛函數

C++的多態性具體體如今運行和編譯兩個方面,在程序運行時的多態性經過繼承和虛函數來體現,而在程序編譯時多態性體如今函數和運算符的重載上。

重載(函數名相同、參數不一樣、參數類型不一樣、返回值無影響)

虛函數是在基類中冠以關鍵字 virtual 的成員函數。它提供了一種接口界面。虛函數能夠在一個或多個派生類中被重定義。

虛函數的重載函數還是虛函數。

在派生類重定義虛函數時必須有相同的函數原型,包括返回類型,函數名、參數個數、參數類型的順序必須相同。虛函數必須是類的成員函數。析構函數能夠是虛函數,但構造函數不能爲虛函數。

純虛函數:在許多狀況下,在基類中不能給出有意義的虛函數定義,這時能夠把它說明成純虛函數,把它的定義留給派生類來作。定義純虛函數的通常形式爲:

class 類名{virtual 返回值類型 函數名(參數表) = 0;};

抽象類:若是一個類中至少有一個純虛函數,那麼這個類被成爲抽象類(abstract class)。抽象類中不只包括純虛函數,也可包括虛函數。抽象類中的純虛函數多是在抽象類中定義的,也多是從它的抽象基類中繼承下來且重定義的。

抽象類有一個重要特色,即抽象類必須用做派生其餘類的基類,而不能用於直接建立對象實例。抽象類不能直接建立對象的緣由是其中有一個或多個函數沒有定義,但仍可以使用指向抽象類的指針支持運行時多態性。

16.C++中異常處理的實現

C++語言異常處理機制的基本思想是將異常的檢測與處理分離。

用3個保留字實現:throw、try和catch。

被調用函數直接檢測到異常條件的存在並使用throw引起一個異常(注意,C++語言的異常是由程序員控制引起的,而不是由計算機硬件或程序運行環境控制的);在上層調用函數中使用try檢測函數調用是否引起異常,檢測到的各類異常由catch捕獲並做相應處理。

相關文章
相關標籤/搜索