《程式員面試寶典》精華 物件導向部分,程式員面試寶典
《程式員面試寶典》精華 物件導向部分
- 正所謂取其精華,去其糟粕。本文謹記錄下《程式員面試寶典》一些關鍵的知識點、易錯點,對於一些雖然重要但書中沒有解釋清楚的地方不做記錄。書裡是沒有糟粕的,只是指不那麼重要,或者比較簡單的地方略過而已,並不是說書寫的不好。希望以後回顧時無需再看此書,只看保留在文中的精華即可。
- 文中有少許bug,亦摘錄在此。
- 本文專註物件導向部分,包括第十章到第十一章的內容
第十章 物件導向
- 10.2 類與結構體的區別:都能繼承、擁有析構等成員函數,唯一的區別是struct成員預設為public,而class預設為private。C++是為了相容C代碼才保留struct關鍵字
- 10.3
class B{...}; B b(); b.f();是錯誤的,b聲明為了一個函數
- 10.3 靜態成員變數必須顯式初始化,例如
int A::i 0;
- 10.3 成員變數初始化順序與初始化列表順序無關,與變數聲明順序有關
- 10.3 常數(cosnt)成員變數必須中建構函式的初始化列表裡面初始化,或者聲明為
static const成員
- 10.4 把成員函式宣告為虛函數造成調用開銷增大,為什麼常常把基類的解構函式聲明為虛函數:多態情況下常常把衍生類別對象的指標賦給基類指標,那麼使用虛函數保證delete時能調用衍生類別對象的解構函式,而不造成記憶體泄露
- 10.4 建構函式為什麼不能聲明為virtual:虛調用是來調用一個只知道介面而不知道其物件類型的成員函數,執行個體化對象時必須知道對象的準確類型,因此建構函式不能為virtual(存疑,不夠clear)
- 10.4 函數f返回一個對象時,使用
A t = f(),會調用拷貝建構函式。即函數參數和返回值都是對象時,都會調用一次拷貝建構函式
- 10.4 含有單個參數的建構函式會定義一個從參數類型到類的隱式類型轉換,使用explicit關鍵字可以避免此轉換
- 10.5 函數參數常聲明為const,這是因為const變數不能隨意轉換為非const,反之則可
- 10.5 要求類的每個對象有唯一id,需要自訂拷貝建構函式避免重複
- 10.5 如果類包含動態分配的指標,那麼需要定義拷貝建構函式和賦值函數
- 10.6 什麼是多態?
- 概念:封裝、繼承、多態是OO的三大基本概念。多態指的是允許將子類類型賦值給父類指標,而父類指標可以通過統一的介面對所有子類對象進行操作
- 作用與目的:封裝為了隱藏實現細節,以及資料類型和函數的統一,模組化;繼承是為了方便擴充已有的代碼模組;兩者均可實現代碼重用,而多態是為了實現介面重用
- 實現方法:虛函數
- 10.6 重寫與重載,前者override是指子類重新定義父類的虛函數,後者overload是指同時存在多個參數列表不同的同名函數
第十一章 繼承與介面
- 11.1 如果顯式調用虛函數,則虛調用機制失效,如
class B::public A{}; B b; b.A::f();,類f為虛函數,但此時顯式調用A中的f
- 11.2 三種繼承方式的區別
- public繼承:基類的public和protected成員對基類保持原有狀態
- 基類成員對衍生類別的可見度:衍生類別(的成員函數)可以訪問基類的public和protected成員
- 基類成員對衍生類別對象的可見度:(通過)衍生類別的對象(指例如
a.f()的方式)可以訪問基類的public成員
- private繼承:將基類的public和protected成員當成衍生類別的private成員,且不能被衍生類別的子類訪問
- 基類成員對衍生類別的可見度:衍生類別(的成員函數)可以訪問基類的public和protected成員
- 基類成員對衍生類別對象的可見度:(通過)衍生類別的對象不可以訪問基類的任何成員,因此基類的成員無法再向下繼承
- protected繼承:將基類的public和protected成員當成衍生類別的protected成員,且不能被衍生類別的子類訪問
- 基類成員對衍生類別的可見度:衍生類別(的成員函數)可以訪問基類的public和protected成員
- 基類成員對衍生類別對象的可見度:(通過)衍生類別的對象不可以訪問基類的任何成員,因此基類的成員無法再向下繼承
- 關鍵差別在於通過衍生類別對象可以訪問基類的哪些成員,以及衍生類別的子類能否訪問衍生類別的成員
- 11.2 三種成員屬性的區別:基類的private成員對衍生類別屏蔽,protected成員使衍生類別可以訪問,基類僅有public成員可以通過基類的對象訪問
- 11.2 虛繼承是為瞭解決多重繼承中的菱形繼承衝突,衍生類別中會添加一個指向基類虛函數表的指標
- 例如,C、B虛繼承自A,D繼承自B、C,則D中共有1個A
- 11.4 Java中使用介面替代多重繼承,C++可以使用抽象類別類比介面
- 11.4 C繼承自A,B,pC指向C對象,pB把pC轉換為指向B的指標,則
pC == pB,這裡發生從C的指標到B的指標的隱式轉換,書中說反了,bug
- 11.5 類的繼承預設為private,通常需要加public關鍵字
- 11.6 如何防止一個類執行個體化:使用帶有純虛函數的抽象類別,或者把建構函式聲明為private
- 11.7 RTTI的缺點:除了運行開銷外,使程式變得不確定,缺乏擴充性
- 11.7 類型轉換運算子多載,無返回值無參數,以目標類型為函數名,如:
operator char*()
- 11.8 dynamic_cast如果轉換失敗返回0
- 11.8 typeid返回值為對type_info常量對象的引用
轉載請註明作者:Focustc,部落格地址為http://blog.csdn.net/caozhk,原文連結為點擊開啟
C/C++面試題,好的話加分儘快
我有本書《程式員面試寶典》,發給你看看 。要是覺得好的話別忘了給分
問:程式員面試寶典 第三版怎,跟第二版差別大不大?哪個版本的更全面一些?
說是更切合現在公司的面試試題的方向及關注的問題
本書是程式員面試寶典的第三版。
第三版主要是更新,在保留原書資料結構、物件導向、程式設計等主乾的基礎上,大量地更新了程式設計例題。以反映自第一版上市以來近幾年時間內所發生的變化,協助求職者們更好地處理一些新問題、新變化。
本書相對上一版的新變化主要有以下幾點:
針對求職過程這一章,在原書3節(筆試、電話面試、面試)的基礎上添加了2節(簽約、違約),以更好地協助求職者應對求職過程中出現一些細節的麻煩。
針對C/C++程式設計這一塊,更新了絕大部分的例題。如原書中迴圈隊列問題在面試時被反覆提及,而近兩年如反迴圈隊列、zigzag問題在面試中也經常出現;又如遞迴面試已經很少出現過於常見的菲波那契問題,而代之以構造多叉樹遞迴、對角線取值等問題,這些我們都在第三版中進行了擴充與重寫。
針對面試中的新題型,本書補充了新的章節:與非或、友元、Static、圖形/音頻、樹、棧、ERP、群體面試,等等。相比前一版而言,第三版的內容更加貼近市場的變化,更加與時俱進。
《程式員面試寶典》不同於同類書籍的主要特點是:
細
中國軟體企業比較小,面試涉及的方面比較多,比較基礎,比如常會考到一些編程基礎性的面試例題,而原有的面試書籍對此方面鮮有觸及。本書把面試國內公司最易考到的基礎考點,放在第二部分C++基礎程式設計裡面,希望能切切實實地解決實際面試問題。
專
面試題是通過一道題考查一個專類的能力,比如關鍵字volatile的面試例題是考查嵌入式編程。從面試官的角度來講,一個測試也許能從多方面揭示應試者的素質及水平。正因為如此,本書將考點細緻分類(嵌入式編程類、基礎代碼類、物件導向類、模板類等),通過面試例題提升讀者對這些方面的掌握能力,達到有的放矢、舉一反三的效果。
廣
求職者應聘的職位,一般有3種:網路工程師、測試工程師、軟體開發人員。諸如趨勢科技、華為3COM、思科等公司,對程式、網路方面的考題日趨增加;此外,隨著全球五百強企業的進入,外企對設計模式、軟體度量等方面試題的喜愛有增無減,而市面上的書籍卻鮮有綜述。本書結合大量考題分析其特點並詳述應試方案,以適應市場需求。
真
第三版在保留原書主乾的基礎上,內容非常新,可以算做面試者求職前的一份全真類比。同時作者將求職中的細節問題(簡曆、招聘、簽約、違約),以及筆試、面試中的感悟融會在書中,給求職者以最真切的人文關懷。真情實感,娓娓道來,指引讀者走上理想的工作崗位。本書不是一本萬能書籍,但卻肯定是您工作與求職的好助手、好夥伴!