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...