1.C與C++的異同,優(yōu)劣;
2.C,C++,VC,BC,TC的區別;
3.C++中try…catch關(guān)鍵字的用法與優(yōu)點(diǎn);
4.枚舉的用法,以及它與宏的區別;
5.const的用法,以及聲明const變量與宏的區別;
const的用法有四種:1. const常量,如const int max = 100;2. const 修飾類(lèi)的數據成員;3. const修飾指針的情況;4. 在一個(gè)函數聲明中,const 可以修飾函數的返回值,或某個(gè)參數;對于成員函數,還可以修飾是整個(gè)函數。
區別:1.const常量有數據類(lèi)型, 而宏常量沒(méi)有數據類(lèi)型;2.編譯器可以對前者進(jìn)行類(lèi)型安全檢查,而對后者只能進(jìn)行字符替換,沒(méi)有類(lèi)型安全檢查,而且字符替換可能會(huì )帶來(lái)料想不到的邊界效應;3. 有些集成化工具可以對const常量進(jìn)行調試, 但不能對宏量進(jìn)行調試。
6.C++中引用與指針的區別;
答:1 引用實(shí)際上是所引用的對象或變量的別名,而指針是包含所指向對象或變量的地址的變量。
2 引用在定義時(shí)必須初始化,而指針在定義時(shí)不初始化。
3 不可以有努NULL的引用,而可以有指向NULL的指針。
4 引用在初始化后不可以改變引用關(guān)系,而指針可以隨時(shí)指向其他對象(非const指針)。
7.C++中virtual與inline的含義分別是什么?
答:在基類(lèi)成員函數的聲明前加上virtual關(guān)鍵字,意味著(zhù)將該成員函數聲明為虛函數。
inline與函數的定義體放在一起,使該函數稱(chēng)為內聯(lián)。inline是一種用于實(shí)現的關(guān)鍵字,而不是用于聲明的關(guān)鍵字。
虛函數的特點(diǎn);如果希望派生類(lèi)能夠重新定義基類(lèi)的方法,則在基類(lèi)中將該方法定義為虛方法,這樣可以啟用動(dòng)態(tài)聯(lián)編。
內聯(lián)函數的特點(diǎn);使用內聯(lián)函數的目的是為了提高函數的運行效率。內聯(lián)函數體的代碼不能過(guò)長(cháng),因為內聯(lián)函數省去調用函數的時(shí)間是以代碼膨脹為代價(jià)的。內聯(lián)函數不能包含循環(huán)語(yǔ)句,因為執行循環(huán)語(yǔ)句要比調用函數的開(kāi)銷(xiāo)大。
一個(gè)函數能否即是虛函數又是內聯(lián)函數?可以,建議不使用?
8.以下關(guān)鍵字的含義與用法:
extern,extern “C”,static,explicit,register,#undef,#ifndef
9.什么是函數重載與覆蓋?
為什么C不支持函數重載?
為什么C++能支持函數重載?
10.VC中,編譯工具條內的Debug與Release選項是什么含義?
Debug 通常稱(chēng)為調試版本,它包含調試信息,并且不作任何優(yōu)化,便于程序員調試程序。Release 稱(chēng)為發(fā)布版本,它往往是進(jìn)行了各種優(yōu)化,使得程序在代碼大小和運行速度上都是最優(yōu)的,以便用戶(hù)很好地使用。Debug帶有大量的調試代碼,運行時(shí)需要相應的運行庫,發(fā)布模式程序緊湊不含有調試代碼和信息,直接可以運行(如果不需要運行庫)
11.編寫(xiě)my_memcpy函數,實(shí)現與庫函數memcpy類(lèi)似的功能,不能使用任何庫函數;
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.編寫(xiě)my_strcpy函數,實(shí)現與庫函數strcpy類(lèi)似的功能,不能使用任何庫函數;
答:char* my_strcpy(char* strdest, const char* strsrc)
{ assert((strdest != NULL) && (strsrc != NULL))
char* address = strdest;
while((*strdest++ = *strsrc++) != NULL)
return address;
}
13.編寫(xiě)gbk_strlen函數,計算含有漢字的字符串的長(cháng)度,漢字作為一個(gè)字符處理;
已知:漢字編碼為雙字節,其中首字節<0,尾字節在0~63以外;(如果一個(gè)字節是-128~127)
14.函數assert的用法?
答:斷言assert是僅在debug版本起作用的宏,用于檢查“不應該“發(fā)生的情況。程序員可以把assert看成一個(gè)在任何系統狀態(tài)下都可以安全使用的無(wú)害測試手段。
15.為什么在頭文件的最前面都會(huì )看到這樣的代碼:
#ifndef _STDIO_H_
#define _STDIO_H_
頭文件中的#ifndef一般格式是這樣的#ifndef <標識> ,#define <標識>;<標識>在理論上來(lái)說(shuō)可以是自由命名的,但每個(gè)頭文件的這個(gè)“標識”都應該是唯一的。標識的命名規則一般是頭文件名全大寫(xiě),前后加下劃線(xiàn),并把文件名中的“.”也變成下劃線(xiàn),如:stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
16.為什么數組名作為參數,會(huì )改變數組的內容,而其它類(lèi)型如int卻不會(huì )改變變量的值?
答:當數組名作為參數時(shí),傳遞的實(shí)際上是地址。而其他類(lèi)型如int作為參數時(shí),由于函數參數值實(shí)質(zhì)上是實(shí)參的一份拷貝,被調函數內部對形參的改變并不影響實(shí)參的值。
1.實(shí)現雙向鏈表刪除一個(gè)節點(diǎn)P,在節點(diǎn)P后插入一個(gè)節點(diǎn),寫(xiě)出這兩個(gè)函數。
2.寫(xiě)一個(gè)函數,將其中的\t都轉換成4個(gè)空格。
3.Windows程序的入口是哪里?寫(xiě)出Windows消息機制的流程。
4.如何定義和實(shí)現一個(gè)類(lèi)的成員函數為回調函數?
5.C++里面是不是所有的動(dòng)作都是main()引起的?如果不是,請舉例。
6.C++里面如何聲明const void f(void)函數為C程序中的庫函數?
7.下列哪兩個(gè)是等同的
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.內聯(lián)函數在編譯時(shí)是否做參數類(lèi)型檢查?
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);
}
}
聯(lián)系客服