1. 程式人生 > >C/C++面向物件基礎知識面試易考點

C/C++面向物件基礎知識面試易考點

  1. C++ 中struct 和class 都可以用來定義型別,兩者的區別是:如果沒有申明成員函式或成員變數的訪問許可權級別,在struct 中預設的許可權是public,而在class 中預設的許可權是private。
  2. 面向物件的三大特性:封裝、繼承、多型。
  3. 封裝是將抽象得到的行為或功能相結合,形成一個整體,也就是“類”,其中資料和函式是類的成員;封裝的目的簡化和安全性,使用者不需要了解具體的實現細節,只需要通過外部介面,以特定的訪問許可權訪問即可。
  4. 繼承是子類可以使用父類的資料和方法,並且可以重寫新增資料或方法,或者過載父類已有方法。
  5. 多型性是允許你將父物件設定成為和一個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作,也就是“上溯造型” A a = new B()
  6. 類的初始化順序,先初始化靜態資料方法,然後再初始化成員變數方法,再執行建構函式內的語句;
  7. 空型別的sizeof 是1而不是0,因為在申明該型別的時候必須在記憶體中佔用一定的空間,否則無法使用這些例項,一般VS 中佔1個位元組;在該型別中新增一個建構函式和解構函式,還是隻佔1個位元組空間,因為呼叫構造/解構函式時只需要知道函式的地址即可,而地址只與型別相關,與例項無關;如果把解構函式標記為虛擬函式,則會為該型別生成虛擬函式表,並在該型別的每一個示例中新增一個指向虛擬函式表的指標,32位系統指標 sizeof = 4,64位系統指標 sizeof = 8。
  8. 拷貝建構函式 A::A(const A& obj) 在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件
  9. C++ 11 中引入 nullptr 專門用來表示空指標,避免混淆。以前是用 NULL, NULL是一個巨集,它的值是0。
  10. C++ 中陣列和指標是既有關聯又有區別的兩個概念。當申明一個數組時,其陣列名也是一個指標,該指標指向陣列的第一個元素,而當陣列作為函式的引數進行傳遞時,會自動退化為同類型的指標。
  11. C/C++中字串以字元’\0’結尾,每個字串多一個額外的字元開銷。
  12. 為了節省記憶體,C/C++ 把常量字串放到單獨的一個記憶體區域。當指標賦值給相同的常量字串時,它們實際上是指向形同的記憶體地址;而用常量記憶體初始化陣列時,會初始化兩個地址不同的陣列,並把常量內容分別複製到陣列中。
  13. C++ 中String 的內容是不能改變的,如果改變內容則會生成一個新例項,當需要多次修改字串內容時,使用StringBuilder處理字串。下圖程式碼中的str 並不會改變。