部分C 面試題答案

2021-04-13 22:35:59 字數 4366 閱讀 7910

1

c++函式中值的傳遞方式有哪幾種

?

答:c++

函式的三種傳遞方式為:值傳遞、指標傳遞和引用傳遞。 2

標頭檔案的作用是什麼

?答:一、通過標頭檔案來呼叫庫功能。在很多場合,源**不便(或不准)向使用者公布,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的介面宣告來呼叫庫功能,而不必關心介面怎麼實現的。編譯器會從庫中提取相應的**。

二、標頭檔案能加強型別安全檢查。如果某個介面被實現或被使用時,其方式與標頭檔案中的宣告不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程式設計師除錯、改錯的負擔。 3

記憶體的分配方式的分配方式有幾種?答

:一、從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數。

二、在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

三、從堆上分配,亦稱動態記憶體分配。程式在執行的時候用

malloc

或new

申請任意多少的記憶體,程式設計師自己負責在何時用

free

或delete

釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。 4

實現雙向鍊錶刪除乙個節點

p,在節點

p後插入乙個節點,寫出這兩個函式

;答:雙向鍊錶刪除乙個節點

ptemplatevoid list::delnode(int p)

t=ptr->next;

cout<<"

你已經將資料項

"刪除"<

ptr->next=ptr->next->next;

length--;

delete t;

}

在節點p

後插入乙個節點:

templatebool list::insert(type t,int p)

if(ptr==null&&k!=p)

return false;

else }

5 寫乙個函式,將其中的

/t都轉換成

4個空格。

void change(char* pstr)

}

6 如何定義和實現乙個類的成員函式為**函式? 答

: 把成員函式申明為

static

就可以了

.

7c++

裡面是不是所有的動作都是

main()

引起的?如果不是,請舉例

. 答:

當然不是的

.並不是所有的動作都是由

main

()引起的,只是編譯器是由

main()

開始執行的

靜態變數和全域性變數的分配早在

main

之前完成

內聯,模板,巨集的擴充套件全是編譯期行為,也不是

main()

完成的

注:c++

和main()

邏輯上沒有必然的聯絡 8

c++裡面如何宣告

const void f(void)

函式為c

程式中的庫函式? 答

: extern   "c"   void   f(void);

所以extern "c"

是強迫c++

編譯器對函式名進行修飾的時候採用

c命名約定。

這樣,在

c++寫的程式中就可以使用已經用

c編譯器編譯好的

obj或者

lib了 9

windows

程式的入口是**?寫出

windows

訊息機制的流程.

答:入口點是

winmain函式.

windows

訊息機制的流程:

一windows

中有乙個系統訊息佇列,對於每乙個正在執行的

windows

應用程式

,系統為其建立乙個

「訊息佇列

」,即應用程式佇列,用來存放該程式可能

建立的各種視窗的訊息。應用程式中含有一段稱作

「訊息迴圈

」的**,用來從訊息佇列中檢索這些訊息並把它們分發到相應的視窗函式中。

二windows

為當前執行的每個

windows

程式維護乙個「訊息佇列」。在發生輸入事件之後,

windows

將事件轉換為乙個「訊息」並將訊息放入程式的訊息佇列中。程式通過執行一塊稱之為「訊息迴圈」的程式**從訊息佇列中取出訊息:

while(getmessage (&msg, null, 0, 0))       

translatemessage(&msg); 

將msg

結構傳給

windows

,進行一些鍵盤轉換。

dispatchmessage (&msg);

又將msg

結構回傳給

windows

。然後,

windows

將該訊息傳送給適當的視窗訊息處理程式,讓它進行處理

sendmessage()

與postmessage()

之間的區別是什麼?

它們兩者是用於向應用程式傳送訊息的。

postmessagex()

將訊息直接加入到應用程式的訊息佇列中,不等程式返回就退出;而

sendmessage()

則剛好相反,應用程式處理完此訊息後,它才返回

10 把乙個鍊錶反向填空

void reverse(test* head)}11

什麼函式不能成為虛函式

?建構函式

內聯函式

(因為沒有函式位址

,在編譯時插入

,是個靜態行為

)

靜態成員函式(因為

: 靜態成員函式類似於全域性函式,不過是屬於相應類的

,  

在相應類的作用域下,沒有

this指標)

12 虛函式與介面的區別:答

::虛函式的概念:

虛函式是動態聯編的基礎,它是引入派生概念之後用來表現基類和派生類成員函式之間的一種關係的。虛函式在基類中定義,它也是一種成員函式,而且是非靜態成員函式。

若乙個例項方法的宣告中含有

virtual

修飾符,則稱該方法為虛擬方法;乙個虛擬方法的實現可以由派生類取代。取代所繼承的虛擬方法的實現的過程稱為重寫(覆蓋

)該方法;在乙個虛擬方法呼叫中,該呼叫所涉及的那個例項的執行時型別確定了要被呼叫的究竟是該方法的哪乙個實現。

虛函式的限制:

1).虛函式僅適用於有繼承關係的類物件

,  

所以只有類的成員函式才能說明

為虛函式

.    

2).靜態成員函式不能是虛函式

.    

3).內聯函式不能是虛函式

.    

4)建構函式不能是虛函式

.    

5).析構函式可以是虛函式

.  

介面可以有靜態成員、巢狀型別、抽象、虛擬成員、屬性和事件。實現介面的任何類都必須提供介面中所宣告的抽象成員的定義。介面可以要求任何實現類必須實現乙個或多個其他介面。

對介面有以下限制:

介面可以用任何可訪問性來宣告,但介面成員必須全都具有公共可訪問性。

不能向成員或介面自身附加安全性許可權。

介面可以定義類建構函式,但不能定義例項建構函式。

每種語言都必須為需要成員的介面對映乙個實現提供規則,因為不只乙個介面可以用相同的簽名宣告成員,且這些成員可以有單獨的實現。

介面可以由類和結構來實現。為了指示類或結構實現了某介面,在該類或結構的基類列表中應該包含該介面的識別符號。如果乙個類或結構實現某介面,則它還隱式實現該介面的所有基介面。即使在類或結構的基類列表中沒有顯式列出所有基介面,也是這樣。

13 c

++中虛函式怎麼實現的

?   

答:每個定義了虛函式的類都有一張虛函式表

vtbl

(virtual   funtion   table

),這張表實際上是乙個函式指標的陣列,記錄了虛函式的入口位址。只要這個類有虛函式,不管是自己定義的還是從父類繼承過來的,那麼類的每個例項——物件都乙個指標

vptr

(virtual   function   table   pointer

),它指向類的虛函式表。

虛函式(多型

)機制的三個條件

:  

1派生關係

2 virtual   屬性3

指標->

訪問方式

C 面試題答案

1 c 函式中值的傳遞方式有哪幾種?答 c 函式的三種傳遞方式為 值傳遞 指標傳遞和引用傳遞。2 標頭檔案的作用是什麼?答 一 通過標頭檔案來呼叫庫功能。在很多場合,源 不便 或不准 向使用者公布,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的介面宣告來呼叫庫功能,而不必關...

面試題答案

2.tomcat工作原理 1.tomcat需要監聽本機上的某個埠。2.tomcat需要抓取此埠上來自客戶端的鏈結並獲得請求呼叫的方法與引數。3.tomcat需要根據請求呼叫的方法,動態地載入方法所在的類,完成類的例項化並通過該例項獲得需要的方法最終將請求傳入方法執行。4.將結果返回給客戶端 jsp ...

微軟面試題答案

第一組題答案 1 三根繩,第一根點燃兩端,第二根點燃一端,第三根不點 第一根和第二根同是點燃,等到第一根滅了,再點燃第二個的另一端 這樣等到第二根燒完只要15分鐘 最後再燒第三根1小時15分 2 根據抽屜原理,4個 3 3公升裝滿 3公升 5公升 全注入 3公升裝滿 3公升 5公升 剩1公升 5公升...