C++面試集錦( 面試被問到的問題 )


1. C 和 C++ 區別

2. const 有什么用途

    主要有三點:

      1:定義只讀變量,即常量 

      2:修飾函數的參數和函數的返回值 

      3: 修飾函數的定義體,這里的函數為類的成員函數,被const修飾的成員函數代表不修改成員變量的值

3. 指針和引用的區別

    1:引用是變量的一個別名,內部實現是只讀指針

    2:引用只能在初始化時被賦值,其他時候值不能被改變,指針的值可以在任何時候被改變

    3:引用不能為NULL,指針可以為NULL

    4:引用變量內存單元保存的是被引用變量的地址

    5:“sizeof 引用" = 指向變量的大小 , "sizeof 指針"= 指針本身的大小

    6:引用可以取地址操作,返回的是被引用變量本身所在的內存單元地址

    7:引用使用在源代碼級相當於普通的變量一樣使用,做函數參數時,內部傳遞的實際是變量地址

4. C++中有了malloc / free , 為什么還需要 new / delete     

  1,malloc與free是C++/C語言的標准庫函數,new/delete是C++的運算符。它們都可用於申請動態內存和釋放內存。
  2,對於非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。
     對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。
     由於malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加於malloc/free。
  3,因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。

 

5. 編寫類String 的構造函數,析構函數,拷貝構造函數和賦值函數

 

6. 多態的實現

7. 單鏈表的逆置

 

8. 堆和棧的區別   

  一個由c/C++編譯的程序占用的內存分為以下幾個部分 
  1、棧區(stack)―   由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。 
  2、堆區(heap) ―   一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。
     注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。 
  3、全局區(靜態區)(static)―,全局變量和靜態變量的存儲是放在一塊的,
     初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束后有系統釋放 
  4、文字常量區  ―常量字符串就是放在這里的。 程序結束后由系統釋放 
  5、程序代碼區―存放函數體的二進制代碼。

 

 

10. 不調用C/C++ 的字符串庫函數,編寫strcpy

char * strcpy(char * strDest,const char * strSrc)
        {
                if ((strDest==NULL)||(strSrc==NULL))                     
                   return NULL;    
                char * strDestCopy=strDest; 
                while ((*strDest++=*strSrc++)!='\0'); 
                *strDest = '\0';
                return strDestCopy;
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM