100道c 面試題 上

2022-09-14 14:39:18 字數 3955 閱讀 7005

1. new, delete, malloc, free關係

new/delete是c++的運算子,delete會呼叫物件的析構函式;

malloc/free是c/c++的標準庫函式,free只釋放記憶體。

2. delete和delete的區別

delete只會呼叫一次析構函式,而delete會呼叫每乙個成員的析構函式。

3. 對比c++和j**a

4. 繼承的優缺點

5. c++有哪些性質(物件導向特點)

封裝、繼承、多型

6. 子類析構時要呼叫父類的析構函式嗎?no

7. 說說多型,虛函式,純虛函式。

c++的多型具體體現在執行和編譯兩方面:在執行時的多型通過繼承和虛函式來體現;編譯時的多型體現在函式和運算子的過載。

抽象類不能用於直接建立物件例項,但仍可使用指向抽象類的指標支援執行時多型性。(沒理解qaq)

8. 求返回值(微軟)

int func(x)

int countx = 0;

while(x)

countx ++;

x = x&(x-1);

return countx;

答案:8

思路:將x轉化成2進製,看含有1的個數。

9. 什麼是「引用」?申明和使用「引用」要注意哪些問題?

注意:引用不佔儲存單元。不能建立陣列的引用。

10. 將「引用」作為函式引數有哪些特點?

11. 在什麼時候需要使用「常引用」?

既要利用引用提高程式的效率,又要保護傳遞給函式的資料不在函式中被改變。

const 型別識別符號 &引用名=目標變數名

注意:試圖將const型物件轉換為非const型是非法的;

引用型引數應該在能被定義為const的情況下,盡量定義為const。

12. 將「引用」作為函式返回值型別的格式、好處和需要遵守的規則

格式:型別識別符號 &函式名 (形參列表及型別說明)

好處:在記憶體中不產生被返回值的副本;

注意:參考effective c++

(1)不能返回區域性變數的引用。

(2)不能返回函式內部new分配的記憶體的引用。

(3)可以返回類成員的引用,但最好是const

(4)流操作符過載返回值申明為「引用」的作用:

返回流物件,程式必須重新(拷貝)構造乙個新的流物件,也就是說,連續的兩個《操作符實際上針對不同的物件!

返回指標,則不能連續使用《操作符。

因此,返回流物件的引用是唯一選擇。

例:#include

int &put(int n);

int vals[10];

int error=-1;

void main()

put(0)=10;

put(9)=20;

coutif (n>=0&&n<=9)return vals[n];

else

(5)在另外一些操作符中,卻千萬不能返回引用:+-*/四則運算符,只能返回物件。

13. 「引用」與多型的關係?

引用是除指標外另乙個可以產生多型效果的手段。這意味著,乙個基類的引用可以指向它的派生類例項。

14. 「引用」與指標的區別?

15. 什麼時候需要「引用」?參考:

16. struct和union有何區別?

(1)結構和聯合都是由多個不同的資料型別成員組成,但在任何同一時刻,聯合中只存放了乙個被選中的成員(所有成員共用一塊位址空間),而

結構的所有成員都存在(不同成員的存放位址不同)。

(2)對於聯合的不同成員賦值,將會對其它成員重寫,原來成員的賦值就不存在了,而對於結構的不同成員賦值是互不影響的。

17. 關於「聯合」的**的輸出?

a) # include

union

a;void main() b)

main()

half;

}number;

number.i=0x4241;

printf("%c%cn",number.half.first,number.half.second);

number.half.first='a';

number.half.second='b';

printf("%xn",number.i);

getch();

}答案:ab(0x41對應'a',是低位;ox42對應'b',是高位)6261(number.i和number.half共用一塊位址空間)

18. 關聯、聚合(aggregation)以及組合(composition)的區別?

關聯是兩個類的一般性聯絡;

聚合表示has-a關係,用空的菱形表示;

組合表示contains-a關係,關聯性強於聚合。組合類和被組合類有相同生命週期,組合類要對被組合類負責,用實心菱形表示。

19. 說說物件導向的三個基本特徵?

封裝、繼承、多型(允許將子類型別的指標賦值給父類型別的指標)

20. 過載(overload)和重寫(override)的區別?早繫結和晚繫結。

21. 多型的作用?

(1)隱藏實現細節,使得**能夠模組化;擴充套件**模組,實現**重用;

(2)介面重用:為了類在繼承和派生的時候,保證使用家族中任一類的例項的某一屬性時的正確呼叫。

22. ado於ado.net的異同?

23. new delete於malloc free

24. # define double(x) x+x, i=5*double(5); i是多少?30

25. 有哪幾種情況只能用initialiaztion list而不能用assignment?

當類中含有const, reference成員變數;基類的建構函式都需要初始化列表。

26. c++是不是型別安全的?不是,兩個不同的指標型別可以強制轉換。c#是型別安全的。

27. main函式執行以前,還會執行什麼**?全域性物件的建構函式

28. 描述記憶體分配方式以及它們之間的區別?

(1)從靜態儲存區域分配。(2)在棧上建立。(3)從堆上分配,亦稱動態記憶體分配。程式設計師自己用malloc/free,new/delete

29. struct和class的區別?struct的成員預設是公有的,class的成員預設是私有的。

30. 當乙個類a中沒有任何成員變數與成員函式,這時sizeof(a)的值是多少?非零。

31. 在8086彙編下,邏輯位址和實體地址是怎麼轉換的?(intel)

通用暫存器給出的位址,是段內偏移位址,相應段內暫存器位址*10h+通用暫存器內位址,就得到了真正要訪問的位址。

32. 比較c++的4種型別轉換方式?

33. 分別寫出bool,int,float,指標變數a與「零」比較的語句。

bool:  if(!a) or if(a)

int:  if(a==0)

float:  const expression exp = 0.000001

if (a-exp)

pointer: if(a!=null) or if(a=null)

34. 請說出const和define想比有何優點?

35. 簡述指標和陣列的區別。

......注意,當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

36. 求兩個數中最大的乙個,不允許用"if", "?", "switch"或者其它判斷語句。

((a+b)+abs(a-b))/2

37. 如何列印出當前原始檔的檔名以及原始檔的當前行號?

cout<<__file__;cout<<__line__;//系統預定義巨集。

38. 如何判斷一段程式是由c編譯的還是c++編譯的?

#ifdef __cplusplus

cout<<"c++";

#else

cout<<"c";

#endif

39. 運算子優先順序:賦值運算子《邏輯與運算子《關係運算子《算術運算子

40. 純虛函式怎麼實現的?在編譯原理上講下?

100道前端面試題02

01.下列表示式輸出結果為?var val smtg console.log value is val smtg something nothing 選項1 value is something 選項2 value is nothing 選項3 other 答 結果為 3,因為 運算子比三元運算子有...

鏈表面試題(上)

slistnode.h ifndef slistnode h define slistnode h include include include include includetypedef int datatype typedef struct slistnode slistnode slist...

鏈表面試題(上)

slistnode.h ifndef slistnode h define slistnode h include include include include includetypedef int datatype typedef struct slistnode slistnode slist...