嵌入式筆試面試題(1) C

2021-08-15 19:12:59 字數 2826 閱讀 2841

c++的類的繼承與多型

1、是不是乙個父類寫了乙個virtual 函式,如果子類覆蓋它的函式不加virtual ,也能實現多型? 能

2、構造、拷貝構造和賦值運算子的概念

3、struct c

c(const c &c)

c(int i)

~c()

c& operator = (const c &c)

int i;

};void test()

4、四行輸出的結果依次順序為:

a. construct: c()

b. construct: c(const c &c)

c. construct: c(int i)

d. operator = (const c &c)

則輸出的正確順序為________

a.c b a d;

b. a c b d

c. c a b d

d. d b a c

5、請選擇下列程式的輸出結果________

class a

;virtual void

printsecond();

};class b: public a

;virtual void

printsecond();

};void main()

a. a a  b b

b. b b  b b 

c. b b  a b

d. a b  b b 

6、函式的各析構函式可以繼承嗎?派生類建構函式中各部分的執行次序是怎樣的?

7、下列運算子函式中,肯定不屬於類value的成員函式的是()

a、value operator/(value)

b、value operator-(value,value)

c、value operator+(value)

d、value operator*(value)

8、過載方法和重析構方法的區別

9、static在c和c++中表示什麼?

10、 c++的模板類有什麼用?

c++的類的基礎語法(修飾符)

1、c中已經有malloc/free ,為什麼在c++中還需要new/delete,並指出

2、malloc/free  new/deletede 區別。

3、什麼是「引用」?宣告和使用「引用」要注意哪些問題?

4、巨集定義、內聯函式、和普通函式的區別

巨集和內聯函式的區別:

帶引數的巨集定義並不對引數進行運算,而是直接替換;

內聯函式先把引數表示式進行運算求值,然後把表示式的值傳遞給形式引數

內聯函式的引數型別和返回值型別在宣告中都有明確的指定;而帶引數

巨集定義的引數沒有型別的概念

巨集和普通函式的區別

<1>巨集做的是簡單的字串替換; 函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別.

<2>巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,既然說是值,自然是計算得來的.

<3> ,巨集占用的是編譯的時間,而函式占用的是執行時的時間.

<4>巨集的引數是不佔記憶體空間的, 函式呼叫時的引數傳遞則是具體變數之間的資訊傳遞,形參作為函式的區域性變數,顯然是占用記憶體的.

<5>函式的呼叫是需要付出一定的時空開銷的,因為系統在呼叫函式時,要保留現場,然後轉入被呼叫函式去執行,呼叫完, 再返回主調函式,此時再恢復現場,這些操作,顯然在巨集中是沒有的.

所謂"內聯函式"就是將很簡單的函式"內嵌"到呼叫他的程式**中,隻樣做的目的是為了避免上面說到的第5點,目的旨在節約下原本函式呼叫時的時空開銷.但必須注意的是:作為內聯函式,函式體必須十分簡單,不能含有迴圈、條件、選擇等複雜的結構,否則就不能做為內聯函式了。

5、c ,c++中struct有什麼區別?

5、使用純虛拷貝建構函式時可能會出現什麼異常

6、傳常數、傳指標、傳引用是什麼

7、static在c和c++中表示什麼?

8、哪乙個不是c++11中新增的語法()

a、右鍵引用

b、lamdba表示式

c、智慧型指標

d、rang-base for

9、靜態成員函式沒有(返回值/ this指標/指標引數/返回型別)?

10、以下**中的輸出語句能輸出嗎?

struct  cls

;cls()

};cls obj;

cout << obj.m_i <

11、過載和重寫,以及隱藏的區別:

overload(過載):在c++程式中,可以將語義、功能相似的幾個函式用同乙個名字表示,但引數或返回值不同(包括型別、順序不同),即函式過載。

(1)相同的範圍(在同乙個類中);

(2)函式名字相同;

(3)引數不同;

(4)virtual 關鍵字可有可無。override(覆蓋):是指派生類函式覆蓋基類函式,特徵是:

(1)不同的範圍(分別位於派生類與基類);

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有virtual 關鍵字。

注:重寫基類虛函式的時候,會自動轉換這個函式為virtual函式,不管有沒有加virtual,因此重寫的時候不加virtual也是可以的,不過為了易讀性,還是加上比較好。overwrite(重寫):隱藏,是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。

嵌入式筆試面試題(8) 死鎖

產生死鎖的必要條件是什麼?解決死鎖有幾種方法?產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。死鎖的四個必要條件 互斥條件 mutual exclusion 資源不能被共享,只能由乙個程序使用。請求與保持條件 hold and wait 已經得到資源的程...

嵌入式面試題

15 typedef 在c語言中頻繁用以宣告乙個已經存在的資料型別的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子 define dps struct s typedef struct s tps 以上兩種情況的意圖都是要定義dps 和 tps 作為乙個指向結構s指標。哪種方法更好呢?...

嵌入式面試題

1.main int ptr int a 1 printf d d a 1 ptr 1 這段程式的輸出是 a 2 2 b 2 1 c 2 5 d 以上均不是 2.考查自加操作 main 這段程式的輸出是 a i 4 j 2 b i 3 j 2 c i 3 j 4 d i 3 j 6 3.此題考查的是...