C++面向對象面試題知識點整理

面向對象
a.編程是在計算機中反映世界
面向系統設計帶來的種種便利
(1)良好的可複用性
(2)易維護
(3)良好的可擴充性


b.以下選項中哪一個不是面向對象設計?
(1)面向對象設計的三原則:繼承,封裝,多態
(2)里氏代換原則是繼承複用的基石
(3)開閉原則是面向對象設計的重要特性之一,軟件對擴展應該是開放的,對修改應該是關閉的。
(4)防禦性編程知識一種編程技巧,與面向設計無關


c.什麼是封裝?
從字面意思來看,封裝就是把一些相關的東西打包成一坨,分裝最廣爲人知的例子,就是在面向對象編程裏面,把數據和針對該數據的操作,統一到一個class裏面


interface屬於繼承,virtual屬於多態,private屬於封裝


d.C++中的空類默認產生哪些類成員函數?


對於一個空類,編譯器默認產生4個成員函數,默認構造函數,析構函數,複製構造函數,賦值函數


e.struct 和 class 的區別(簡單介紹)


區別是Class中的變量默認是private,struct中的變量默認是public。
struct可以有構造函數,析構函數,之間也可以繼承,C++中的struct其實和class意義一樣,唯一不同的是struct裏面的默認訪問權限是public,class默認的訪問權限是private。


C++中存在struct關鍵字的唯一意義就是爲了讓C程序員有個歸屬感,是爲了讓C++編譯器兼容以前用C開發出來的項目。


f.哪一種成員變量可以在同一個類的實例之間實現共享?


必須使用靜態成員變量在一個類的所有實例之間共享數據
(1)如果想限制對靜態成員變量訪問,則必須把他們聲明爲保護型或者私有型
(2)不允許用靜態成員變量去存放某一個對象的數據
(3)靜態成員數據是在這個類的所有對象之間共享的


g.如果要把靜態成員數據設爲私有,該如何訪問?


通過公有靜態成員函數訪問。


注意:設置了靜態成員變量,要給靜態成員變量設置初值


h.初始化列表的初始化變量順序是根據成員變量的聲明順序來執行的。


i.虛函數
虛函數就是允許被其子類重新定義的成員函數。


虛函數採用了一種虛調用的方法,虛調用是一種可以在 只有部分信息的 情況下 工作的機制,特別允許我們調用一個只知道接口而不知道其 準確類型的函數,但是如果要創建一個對象,你勢必要知道對象的準確類型,因此構造函數不能爲空


j.虛函數是非常有效的,但不能把每一個函數都聲明爲虛函數.
因爲虛函數是有代價的,由於每個虛函數的對象都需要維護一個V表,因此使用虛函數時會產生額外的系統開銷,如果是一個很小的類,且不想派生其他的類,那麼根本沒有必要使用虛函數。


k.重寫和重載的區別?


子類重新定義父類虛函數的做法,稱爲重寫。
重寫的函數必須有一致的參數表和返回值。


重載是指編寫一個與已有函數同名但是參數表不同的函數


l.宏,內聯函數,模板都可以在編譯時解析,但是虛函數不可以,他必須在運行時才能確定
 
m.多態:面向對象編程領域的核心概念。
多態可以簡單概括爲“一個接口,多個實現”,在程序運行時纔可以確定調用哪一個函數


多態時通過繼承和虛函數實現的。


n.析構函數也可以設爲內聯函數(可以通過代碼嘗試實現)





















































































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