IT公司筆試面試題系列

時(shí)間:2022-07-12 05:01:28 筆試 我要投稿
  • 相關(guān)推薦

IT公司筆試面試題系列

C++筆試題

IT公司筆試面試題系列

1.多態(tài)類(lèi)中的虛函數表是Compile-Time,還是Run-Time時(shí)建立的?

答案:虛擬函數表是在編譯期就建立了,各個(gè)虛擬函數這時(shí)被組織成了一個(gè)虛擬函數的入口地址的數組.而對象的隱藏成員--虛擬函數表指針是在運行期--也就是構造函數被調用時(shí)進(jìn)行初始化的,這是實(shí)現多態(tài)的關(guān)鍵.

2.一個(gè)父類(lèi)寫(xiě)了一個(gè)virtual 函數,如果子類(lèi)覆蓋它的函數不加virtual ,也能實(shí)現多態(tài)?

在子類(lèi)的空間里,有沒(méi)有父類(lèi)的這個(gè)函數,或者父類(lèi)的私有變量? (華為筆試題)

答案:只要基類(lèi)在定義成員函數時(shí)已經(jīng)聲明了virtue關(guān)鍵字,在派生類(lèi)實(shí)現的時(shí)候覆蓋該函數時(shí),virtue關(guān)鍵字可加可不加,不影響多態(tài)的實(shí)現。子類(lèi)的空間里有父類(lèi)的所有變量(static除外)。

3.完成字符串拷貝可以使用 sprintf、strcpy 及 memcpy 函數,請問(wèn)這些函數有什么區別,你喜歡使用哪個(gè),為什么?

答案:這些函數的區別在于實(shí)現功能以及操作對象不同。

1.strcpy 函數操作的對象是字符串,完成從源字符串到目的字符串的拷貝功能。

2.snprintf 函數操作的對象不限于字符串:雖然目的對象是字符串,但是源對象可以是字符串、也可以是任意基本類(lèi)型的數據。這個(gè)函數主要用來(lái)實(shí)現(字符串或基本數據類(lèi)型)向字符串的轉換功能。如果源對象是字符串,并且指定 %s 格式符,也可實(shí)現字符串拷貝功能。

3.memcpy 函數顧名思義就是內存拷貝,實(shí)現將一個(gè)內存塊的內容復制到另一個(gè)內存塊這一功能。內存塊由其首地址以及長(cháng)度確定。程序中出現的實(shí)體對象,不論是什么類(lèi)型,其最終表現就是在內存中占據一席之地(一個(gè)內存區間或塊)。因此,memcpy 的操作對象不局限于某一類(lèi)數據類(lèi)型,或者說(shuō)可適用于任意數據類(lèi)型,只要能給出對象的起始地址和內存長(cháng)度信息、并且對象具有可操作性即可。鑒于 memcpy 函數等長(cháng)拷貝的特點(diǎn)以及數據類(lèi)型代表的物理意義,memcpy 函數通常限于同種類(lèi)型數據或對象之間的拷貝,其中當然也包括字符串拷貝以及基本數據類(lèi)型的拷貝。

對于字符串拷貝來(lái)說(shuō),用上述三個(gè)函數都可以實(shí)現,但是其實(shí)現的效率和使用的方便程度不同:

1.strcpy 無(wú)疑是最合適的選擇:效率高且調用方便。

2.snprintf 要額外指定格式符并且進(jìn)行格式轉化,麻煩且效率不高。

3.memcpy 雖然高效,但是需要額外提供拷貝的內存長(cháng)度這一參數,易錯且使用不便;并且如果長(cháng)度指定過(guò)大的話(huà)(最優(yōu)長(cháng)度是源字符串長(cháng)度 + 1),還會(huì )帶來(lái)性能的下降。其實(shí) strcpy 函數一般是在內部調用 memcpy 函數或者用匯編直接實(shí)現的,以達到高效的目的。因此,使用 memcpy 和 strcpy 拷貝字符串在性能上應該沒(méi)有什么大的差別。


99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆