華為(c++經典面試題)

來源:互聯網
上載者:User

1.C與C++的異同,優劣;
2.C,C++,VC,BC,TC的區別;
3.C++中try…catch關鍵字的用法與優點;
4.枚舉的用法,以及它與宏的區別;
5.const的用法,以及聲明const變數與宏的區別;
const的用法有四種:1. const常量,如const int max = 100;2. const 修飾類的資料成員;3. const修飾指標的情況;4. 在一個函式宣告中,const 可以修飾函數的傳回值,或某個參數;對於成員函數,還可以修飾是整個函數。
區別:1.const常量有資料類型, 而宏常量沒有資料類型;2.編譯器可以對前者進行型別安全檢查,而對後者只能進行字元替換,沒有型別安全檢查,而且字元替換可能會帶來料想不到的邊界效應;3. 有些整合化工具可以對const常量進行調試, 但不能對宏量進行調試。
6.C++中引用與指標的區別;
答:1 引用實際上是所引用的對象或變數的別名,而指標是包含所指向對象或變數的地址的變數。
2 引用在定義時必須初始化,而指標在定義時不初始化。
3 不可以有努NULL的引用,而可以有指向NULL的指標。
4 引用在初始化後不可以改變參考關聯性,而指標可以隨時指向其他對象(非const指標)。
7.C++中virtual與inline的含義分別是什嗎?
答:在基類成員函數的聲明前加上virtual關鍵字,意味著將該成員函式宣告為虛函數。
inline與函數的定義體放在一起,使該函數稱為內聯。inline是一種用於實現的關鍵字,而不是用於聲明的關鍵字。
虛函數的特點;如果希望衍生類別能夠重新定義基類的方法,則在基類中將該方法定義為虛方法,這樣可以啟用動態聯編。
內嵌函式的特點;使用內嵌函式的目的是為了提高函數的運行效率。內嵌函式體的代碼不能過長,因為內嵌函式省去調用函數的時間是以代碼膨脹為代價的。內嵌函式不能包含迴圈語句,因為執行迴圈語句要比調用函數的開銷大。
一個函數能否即是虛函數又是內嵌函式?可以,建議不使用?
8.以下關鍵字的含義與用法:
extern,extern “C”,static,explicit,register,#undef,#ifndef
9.什麼是函數重載與覆蓋?
為什麼C不支援函數重載?
為什麼C++能支援函數重載?
10.VC中,編譯工具條內的Debug與Release選項是什麼含義?

Debug 通常稱為調試版本,它包含調試資訊,並且不作任何最佳化,便於程式員偵錯工具。Release 稱為發布版本,它往往是進行了各種最佳化,使得程式在代碼大小和運行速度上都是最優的,以便使用者很好地使用。Debug帶有大量的調試代碼,運行時需要相應的運行庫,發布模式程式緊湊不含有調試代碼和資訊,直接可以運行(如果不需要運行庫)
11.編寫my_memcpy函數,實現與庫函數memcpy類似的功能,不能使用任何庫函數;
void* mymemcpy(void* pvTo, const char* pvFrom, size_t size)
{ assert((dest != NULL) && (src != NULL));
   byte* psTo = (byte*)pvTo;
   byte* psFrom = (byte*)pvFrom;
   while (size– > 0)
   {*psTo++ = *psFrom++;}
   return pvTo;
}
12.編寫my_strcpy函數,實現與庫函數strcpy類似的功能,不能使用任何庫函數;
答:char* my_strcpy(char* strdest, const char* strsrc)
{ assert((strdest != NULL) && (strsrc != NULL))
   char* address = strdest;
   while((*strdest++ = *strsrc++) != NULL)
   return address;
}
13.編寫gbk_strlen函數,計算含有漢字的字串的長度,漢字作為一個字元處理;
已知:漢字編碼為雙位元組,其中首位元組<0,尾位元組在0~63以外;(如果一個位元組是-128~127)
14.函數assert的用法?
答:斷言assert是僅在debug版本起作用的宏,用於檢查“不應該“發生的情況。程式員可以把assert看成一個在任何系統狀態下都可以安全使用的無害測試手段。
15.為什麼在標頭檔的最前面都會看到這樣的代碼:
#ifndef _STDIO_H_
#define _STDIO_H_

標頭檔中的#ifndef一般格式是這樣的#ifndef <標識> ,#define <標識>;<標識>在理論上來說可以是自由命名的,但每個標頭檔的這個“標識”都應該是唯一的。標識的命名規則一般是標頭檔名全大寫,前後加底線,並把檔案名稱中的“.”也變成底線,如:stdio.h

#ifndef _STDIO_H_
#define _STDIO_H_
16.為什麼數組名作為參數,會改變數組的內容,而其它類型如int卻不會改變變數的值?
答:當數組名作為參數時,傳遞的實際上是地址。而其他類型如int作為參數時,由於函數參數值實質上是實參的一份拷貝,被調函數內部對形參的改變並不影響實參的值。
1.實現雙向鏈表刪除一個節點P,在節點P後插入一個節點,寫出這兩個函數。
2.寫一個函數,將其中的\t都轉換成4個空格。
  3.Windows程式的入口是哪裡?寫出Windows訊息機制的流程。
  4.如何定義和實現一個類的成員函數為回呼函數?
  5.C++裡面是不是所有的動作都是main()引起的?如果不是,請舉例。
  6.C++裡面如何聲明const void f(void)函數為C程式中的庫函數?
  7.下列哪兩個是等同的
  int b;
  A const int* a = &b;
  B const* int a = &b;
  C const int* const a = &b;
  D int const* const a = &b;
  8.內嵌函式在編譯時間是否做參數類型檢查?
  void g(base & b){
   b.play;
  }
  void main(){
   son s;
   g(s);
   return;
  }
3、WinMain
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.