網上摘抄一些C++筆試題目

來源:互聯網
上載者:User

C++筆試題
1.多態類中的虛函數表是Compile-Time,還是Run-Time時建立的?

答案:虛擬函數表是在編譯期就建立了,各個虛擬函數這時被組織成了一個虛擬函數的入口地址的數組.而對象的隱藏成員--虛擬函數表指標是在運行期--也就是建構函式被調用時進行初始化的,這是實現多態的關鍵.

2.一個父類寫了一個virtual 函數,如果子類覆蓋它的函數不加virtual ,也能實現多態?在子類的空間裡,有沒有父類的這個函數,或者父類的私人變數? (華為筆試題)答案:只要基類在定義成員函數時已經聲明了virtue關鍵字,在衍生類別實現的時候覆蓋該函數時,virtue關鍵字可加可不加,不影響多態的實現。子類的空間裡有父類的所有變數(static除外)。

3.完成字串拷貝可以使用 sprintf、strcpy 及 memcpy 函數,請問這些函數有什麼區別,你喜歡使用哪個,為什嗎?

答案:這些函數的區別在於實現功能以及操作對象不同。
1.strcpy 函數操作的對象是字串,完成從源字串到目的字串的拷貝功能。
2.snprintf 函數操作的對象不限於字串:雖然目的對象是字串,但是來源物件可以是字串、也可以是任意基本類型的資料。這個函數主要用來實現(字串或基礎資料型別 (Elementary Data Type))向字串的轉換功能。如果來源物件是字串,並且指定 %s 格式符,也可實現字串拷貝功能。
3.memcpy 函數顧名思義就是記憶體拷貝,實現將一個記憶體塊的內容複寫到另一個記憶體塊這一功能。記憶體塊由其首地址以及長度確定。程式中出現的實體物件,不論是什麼類型,其最終表現就是在記憶體中佔據一席之地(一個記憶體區間或塊)。因此,memcpy 的操作對象不局限於某一類資料類型,或者說可適用於任意資料類型,只要能給出對象的起始地址和記憶體長度資訊、並且對象具有可操作性即可。鑒於 memcpy 函數等長拷貝的特點以及資料類型代表的物理意義,memcpy 函數通常限於同種類型資料或對象之間的拷貝,其中當然也包括字串拷貝以及基礎資料型別 (Elementary Data Type)的拷貝。

對於字串拷貝來說,用上述三個函數都可以實現,但是其實現的效率和使用的方便程度不同:

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

    2.snprintf 要額外指定格式符並且進行格式轉化,麻煩且效率不高。

    3.memcpy 雖然高效,但是需要額外提供拷貝的記憶體長度這一參數,易錯且使用不便;並且如果長度指定過大的話(最優長度是源字串長度 + 1),還會帶來效能的下降。其實 strcpy 函數一般是在內部調用 memcpy 函數或者用彙編直接實現的,以達到高效的目的。因此,使用 memcpy 和 strcpy 拷貝字串在效能上應該沒有什麼大的差別。

4.請編寫一個 C 函數,該函數給出一個位元組中被置 1 的位的個數,並請給出該題的至少一個不同解法。

第一種//這種方法我沒實踐成功,有成功的不防告知情況

unsigned int TestAsOne0(char log)   

{   
    int i;   
    unsigned int num=0, val;   
    for(i=0; i<8; i++)   
    {   
         val = log >> i;     //移位
         val &= 0x01;     //與1相與
             if(val)   
                num++;   
    }   
    return num;  

第二種//這種我實踐成功了

unsigned int TestAsOne1(char log)  
{   
    int i;   
    unsigned int num = 0, val;

    int op = log - '0';   
    for(int i=0; i<8; i++)   
    {   
         val = op % 2;
         op = op / 2;//同樣是移位效果
         if(val)   
              num++;   
    }   
    return num;  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.