c++面試題之雜談

 1.一個指針可以是volatile嗎?                                                 

    可以,因爲指針和普通變量一樣,有時也有變化程序的不可控性。常見例:子中斷服務子程序修改一個指向一個buffer的指針時,必須用volatile來修飾這個指針。

    說明:指針是一種普通的變量,從訪問上沒有什麼不同於其他變量的特性。其保存的數值是個整型數據,和整型變量不同的是,這個整型數據指向的是一段內存地址。

    擴展:一個定義爲volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器裏的備份。

2.面向對象的三大特徵

面向對象的三大特徵是封裝性、繼承性和多態性:

 封裝性:將客觀事物抽象成類,每個類對自身的數據和方法實行protection(private, protected,public)。

 繼承性:廣義的繼承有三種實現形式:實現繼承(使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現代碼)、接口繼承(僅使用屬性和方法,實現滯後到子類實現)。

 多態性:是將父類對象設置成爲和一個或更多它的子對象相等的技術。用子類對象給父類對象賦值之後,父類對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。

說明:面向對象的三個特徵是實現面向對象技術的關鍵,每一個特徵的相關技術都非常的複雜,程序員應該多看、多練。

3.C++的空類有哪些成員函數

 缺省構造函數。

 缺省拷貝構造函數。

 缺省析構函數。

 缺省賦值運算符。

 缺省取址運算符。

 缺省取址運算符 const。

   注意:有些書上只是簡單的介紹了前四個函數。沒有提及後面這兩個函數。但後面這兩個函數也是空類的默認函數。另外需要注意的是,只有當實際使用這些函數的時候,編譯器纔會去定義它們。

4:談談你對拷貝構造函數和賦值運算符的認識

  拷貝構造函數和賦值運算符重載有以下兩個不同之處:

 (1)拷貝構造函數生成新的類對象,而賦值運算符不能。

 (2)由於拷貝構造函數是直接構造一個新的類對象,所以在初始化這個對象之前不用檢驗源對象是否和新建對象相同。而賦值運算符則需要這個操作,另外賦值運算中如果原來的對象中有內存分配要先把內存釋放掉

  注意:當有類中有指針類型的成員變量時,一定要重寫拷貝構造函數和賦值運算符,不要使用默認的。



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