1. 對於靜態字串儲存在文字常量區,函式中的p與*p
2. 判斷是否是2的冪
3. 巨集 #與##
4. malloc、calloc、realloc
5. cache和虛擬儲存都基於程式的區域性性原理。
6. 類過載、隱藏與覆蓋區別
7. new和delete式c++運算子,而malloc和free是c/c++標準庫函式。
8. delete 只會呼叫一次析構函式,而 delete 會呼叫每乙個成員的析構函式。
9. 物件導向特點:封裝,繼承和多型。
10. 子類析構時要呼叫父類的析構函式
11. 繼承是子類使用父類的方法,而多型則是父類使用子類的方法。加virtual導致某個類在判斷使用該方法時用它的子類的方法(如果某個類是派生類且呼叫父類方法。
三種:)virtual關鍵字的作用就是提示編譯器進行遲後聯編,告訴連線過程:「我是個虛的,先不要連線我,等執行時再說吧」。
虛函式關係通過繼承關係自動傳遞給基類中同名的函式,也就是上例中如果a中print有virtual,那麼 b中的print即使不加virtual,也被自動認為是虛函式。虛函式的作用是為了實現對基類與派生類中的虛函式成員的遲後聯編,而純虛函式是表明不具體實現的虛函式成員,即純虛函式無實現**。其作用僅僅是為其派生類提過乙個統一的構架,具體實現在派生類中給出。
12. 乙個函式宣告為純虛後,純虛函式的意思是:我是乙個抽象類!
不要把我例項化!純虛函式用來規範派生類的行為,實際上就是所謂的「介面」。它告訴使用者,我的派生類都會有這個函式。
抽象類:含有乙個或多個純虛函式的類稱為抽象類。
13. c++ 函式同名不同返回值不算過載!函式過載是忽略返回值型別的。
14. 求兩個數中比較大的乙個(兩種方法)
15. 交換兩個數的值
16. c++程式中呼叫被c編譯後的函式加extern 「c」解決名字匹配問題
17. 標頭檔案中的ifndef/define/endif是防止標頭檔案被重複引用
18. 「 」與< >區別,」」從使用者資料夾目錄開始找,<>從系統資料夾找
19. c++編譯是定義了_cplusplus c編譯時定義了_stdc_
20. main()主函式執行完畢後,可以使用atexit()函式註冊乙個函式
21.一、exit()函式
函式宣告:void exit(int state);
exit()函式用於在程式執行的過程中隨時結束程式,exit的引數state是返回給作業系統,返回0表示程式正常結束,非0表示程式非正常結束。main函式結束時也會隱式地呼叫exit函式。exit函式執行時首先會執行由atexit()函式登記的函式,然後會做一些自身的清理工作,同時重新整理所有輸出流、關閉所有開啟的流並且關閉通過標準i/o函式tmpfile()建立的臨時檔案。
二、atexit()函式
函式宣告:int atexit(void (*func)(void));
很多時候我們需要在程式退出的時候做一些諸如釋放資源的操作,但程式退出的方式有很多種,比如main()函式執行結束、在程式的某個地方用exit() 結束程式、使用者通過ctrl+c或ctrl+break操作來終止程式等等,因此需要有一種與程式退出方式無關的方法來進行程式退出時的必要處理。方法就是用atexit()函式來註冊程式正常終止時要被呼叫的函式。
atexit()函式的引數是乙個函式指標,函式指標指向乙個沒有引數也沒有返回值的函式。atexit()的函式原型是:int atexit (void (*)(void));
在乙個程式中最多可以用atexit()註冊32個處理函式,這些處理函式的呼叫順序與其註冊的順序相反,也即最先註冊的最後呼叫,最後註冊的最先呼叫。
下面是一段**示例:
#include // 使用atexit()函式所必須包含的標頭檔案stdlib.h
#include
void terminatetest()
程式的執行結果為:
the end of main()
程式正在結束...
這些函式都是在main結束以後才被呼叫的。atexit只是註冊他們,使得他們在main結束以後被呼叫,看名字就可以看出來。
atexit這個玩意超有用,可以按照你予設的順序摧毀全域性變數(類),例如有個log類,你在其它的全域性類裡也有可能呼叫到log類寫日誌。所以log類必須最後被析構 。假如沒有規定析構順序,那麼程式在退出時將有可能首先析構log類,那麼其它的全域性類在此時將無法正確寫日誌。
把資料寫回檔案, 刪除臨時檔案, 這才是真正有用的.
22. #define seconds_per_year(60*50*24*365)ul
23. #define min(a,b) ((a)<=(b)?(a):(b))
24. const作用:在c語言中為定義變數,修飾函式引數,修飾函式返回值。在c++中還可以修飾函式定義體,定義類中某個成員函式為恆態函式,即不改變類中的資料成員。
25. 對於空類與空結構體sizeof的大小為1
26. static靜態變數存在全域性資料區,而sizeof計算棧中分配的大小,不會將static計算在內的。
27. int ss[100] = 「0123456789」;strlen(ss)錯誤,因為strlen()的引數只能是char*,且必須為」\0」結尾的。
28. sizeof是乙個操作符。strlen()是乙個函式。
29. 對類進行sizeof(),如果裡面出現virtual則內部給類提供了乙個vptr來儲存所有的虛函式列表(指向列表的頭),也就是所有virtual占用4位元組。如果該類為空類,則該類佔1個位元組。
乙個類中的函式不會占用空間,變數會占用空間。空類占用的空間為1,單一繼承的空類空間也為1,多重繼承的空類空間還是1。但是虛繼承涉及虛表,所以占用空間為4。
30. 在計算乙個陣列int a[10]大小時應該注意過程中間是否發生了轉換。如果在應用時進行了轉換如:
將a作為了函式的引數,那麼此時a就在這個函式中變為了乙個指標,sizeof(a)變為了4。但在函式外則為4*10。
31. 內聯函式與巨集:內聯函式是指用inline關鍵字修飾的函式。
內聯函式從源**層看,有函式的結構,而在編譯後,卻不具備函式的性質。內聯函式不是在呼叫時發生控制轉移,而是在編譯時將函式體嵌入在每乙個呼叫處。編譯時,類似巨集替換,使用函式體替換呼叫處的函式名。
一般在**中用inline修飾,但是能否形成內聯函式,需要看編譯器對該函式定義的具體處理。在類內定義的函式被預設成內聯函式。使用內聯函式的時候要注意:
1遞迴函式不能定義為內聯函式。2.內聯函式一般適合於不存在while和switch等複雜的結構且只有1~5條語句的小函式上,否則編譯系統將該函式視為普通函式。
3.內聯函式只能先定義後使用,否則編譯系統也會把它認為是普通函式。4.
對內聯函式不能進行異常的介面宣告。內聯函式和巨集的區別在於,巨集是由預處理器對巨集進行替代,而內聯函式是通過編譯器控制來實現的。而且內聯函式是真正的函式,只是在需要用到的時候,內聯函式像巨集一樣的展開,所以取消了函式的引數壓棧,減少了呼叫的開銷。
你可以象呼叫函式一樣來呼叫內聯函式,而不必擔心會產生於處理巨集的一些問題。內聯函式在編譯時不產生**,而是將有關**嵌入到呼叫處。
32. 指標與引用的區別:@1 非空區別。
不能使用指向空值的引用,乙個引用必須總是指向某些物件。如果你是用乙個變數並讓他指向乙個物件,但是該變數在某些時候也可能不指向任何物件,則申明為指標。@2 合法性。
指標在使用前應該測試是否為空。@3 可修改性。指標可以被重新賦值以指向另外乙個不同物件,但引用在初始化後就不能被改變。
@4 應用區別。可能為空或可能改變指向則用指標。
33. c++中:乙個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果。
this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式。this指標是在例項化乙個物件後產生的,並且指向物件本身。比如例項化乙個物件後產生的,並且指向物件本身。
如例項化乙個物件pt,那麼this=&pt;如this->x=0等同於pt.x=0。
34. this只能在成員函式中使用,全域性函式、靜態函式都不能使用this。實際上成員函式第乙個預設的引數為t *const this。
如classa)}。func在編譯器看來是int func(a* const this,int p);由此可見this在成員函式開始前構造,結束後清除。vc通過ecx暫存器傳遞this引數。
若class或struct裡面沒有方法的話,它們是沒有建構函式的,只能當c的struct使用,採用type xx方式定義的話,在棧中分配記憶體,此時this指標的值就是記憶體的位址。但採用new的話在堆中分配記憶體,new操作符通過eax返回分配的位址,然後設定給指標變數,之後去呼叫建構函式,此時將這個記憶體塊位址傳給ecx。但this指標的存放位址不一定在**,編譯器不同就可能不同。
35. this指標如何傳遞類中的函式?大多數編譯器通過ecx暫存器傳遞this指標。
否則不同編譯器產生的obj檔案就無法匹配了。this是通過函式引數的首引數來傳遞的。類在例項化時,只分配類中的變數空間,並沒有為函式分配空間。
36. this指標如何訪問類中的變數?如果是結構的話,通過結構指標訪問結構中的變數。同理this就是那個指標。
37. this指標只有在成員函式中才有定義。只有成員函式裡才有this指標的位置。
38. 普通的類函式(成員函式、靜態函式)都不會建立乙個函式表來儲存函式指標。只有虛函式才會被放到函式表中。
但即使是虛函式如果編譯器明確知道都用的是哪個函式,編譯器就不會通過函式表中的指標間接呼叫,而是直接呼叫該函式。
39. 函式指標:void (*f)()。
函式返回指標:void* fun()。const指標:
const int*。指向const的指標:int *const。
指向const的const指標。
面試筆試題
湯森路透 資料庫 insert 插入資料 into是不是必須的?delete作刪除時總共分幾步?申請陣列指標空間 在異常處理中是用值傳遞好還是用引用傳遞好.new 申請空間失敗會返回null並丟擲異常?並記錄到日誌中?tplink 問了一堆基礎的題目 static的用法,ifdef幹嘛的等等.有個問...
面試筆試題
北京名呈文化藝術發展 招聘面試題 姓名 答題時間為30分鐘 1你在大學學的是什麼專業或在創業中接受過哪些培訓?2你在學校裡對哪些課程感興趣,哪些課程學的最好?為什麼?3 你喜歡讀什麼書?最喜歡的作者是誰?4 從現在開始算,末來的五年,你想自己成為什麼樣子?你擔當的工作重要性如何 事業目標 對現在工作...
公司面試筆試題
財務人員筆試試題 姓名 一 選擇題 本大題20個小題,每題2分,共40分,每題只有乙個正確答案 1 有借必有貸,借貸必相等 的記賬規則適用於 a 單式記賬法b 收付記賬法c 借貸記賬法d 增減記賬法 2 從銀行提取現金,一般應編制 a 現金收款憑證b 現金付款憑證c 銀行存款收款憑證d 銀行存款付款...