面試總結一

2021-08-21 12:50:54 字數 3075 閱讀 8752

1、基類的虛構函式為什麼使用virtual?這種虛析構函式尋在的意義?

virtual虛函式是動態繫結的基礎(這很重要)!在動態繫結的過程中,我們使用的是基類的指標指向子類(例如b派生於a,a *pa = new b();),如果沒有使用virtual實現動態繫結,在進行delete a;時,不會呼叫b的析構函式,如果b的析構函式中寫有釋放記憶體的原始碼,此時可能就會造成記憶體的洩漏。

1)何為動態繫結與靜態繫結?

舉個示例:

動態繫結(pa可以靈活的指向繼承於a的派生類):a *pa = new b();

靜態繫結(pb只能指向b物件的位址空間):b *pb = new b();

使用virtual對乙個成員函式進行什麼宣告後,會產生乙個4位元組的指向函式的指標(虛函式的實現原理可以檢視這裡子類繼承於基類後,使用virtual宣告的函式都指向同乙個位址,這也是為什麼析構函式要使用virtual的原因,因為這樣在delete a的時候,會呼叫a中的析構函式位址,而b繼承於a,且a的析構函式為虛析構函式,所以此時實際也會呼叫b的析構函式,避免了記憶體的洩漏問題。

2、以下的輸出結果(考察函式過載與虛函式):

#include 

using

namespace

std;

class a

virtual

void funcb()

};class b : public a

virtual

void funcb()

};void main(void)

答案:

funca called

funcbb called

funca called

funcb called

3、使用uint32來定義unsigned int:#define uint32 unsigned int

注意:寫成#define uint32 (unsigned int)是錯誤的

4、sizeof與strlen的輸出結果:6 0

char sz[6] = ;

for (int i = 0; i < 5; i++)

cout

<< sizeof(sz) << endl;

cout

<< strlen(sz) << endl;

注:sizeof計算的是陣列所占用的記憶體大小,包括結束的』\0』,所以一共占用6個位元組(返回的是所占用的位元組個數);strlen計算的是陣列以』\0』結尾的長度,不包括』\0』,這裡的sz是01234以及後面存有乙個』\0』,但是第乙個元素在記憶體中0x00,即』\0』,所以strlen為0

5、輸出結果:2.19e+02

double  x;

x = 218.82631;

printf("%-6.2e\n", x);

注:

%:表示格式說明的起始符號,也是轉義符號,有一題 printf(「%%%%」)輸出幾個?答案輸出%% 兩個

-:有-表示左對齊輸出,如省略表示右對齊輸出

0:有0表示指定空位填0,如省略表示指定空位不填

m.n m指域寬,即對應的輸出項在輸出裝置上所佔的字元數。

n指精度。用於說明輸出的實型數的小數字數(此處為.19)。沒有指定n時,隱含的精度為n=6位

e格式表示以指數形式輸出實數

那麼這題的意思是以左對齊、指數形式、總長度m =6、小數n=2兩位 輸出

對於域寬的補充:這裡的域寬(總長度)為6,而2.19長度為4,6-4=2,還余兩個長度,此時就在左邊補兩個空格把長度湊齊,但是我們這裡使用的%-為左對齊,所以就沒有寫成( 2.19e+02)該方式。

6、const int *p、int const *p與int *const p

(1)const int *p與int const *p

表示*p的值不能改變(簡單理解就是,const只能約束到它後面的物件,例如:const int *p,除去資料型別,可以看成 const *p,所以不難理解*p是不能改變的。再看int const *p,除去資料型別就是const *p,也是約束的是*p的值不能進行改變)

(2)int *const p

約束的是指標p的值(指向的位址)不能改變。(利用上面的理解方式,去除資料型別以及前面的符號*,剩下的是const p,約束的就是p的值)

(3)再看乙個複雜的 const int *const p

先進行分解const (int *const p),把括號裡面的看成乙個整體,去除資料型別後 const (*const p),即*p的值不能進行改變,再分析括號裡面,不能得出p的值也不能進行改變。綜上所述,p所指向的物件及物件的值均不能改變。

7、sizeof(b):12

class a

;class b: public a {};

8、malloc申請的是虛擬記憶體,不是物理記憶體

malloc的記憶體分配再執行階段

9、如果友元函式過載乙個運算子時,運算子至少有乙個引數

10、如果基類時抽象類,則子類需要實現基類的純虛函式才能例項化。如果不實現基類的純虛函式,也不會出現編譯錯誤,只是子類也不能進行例項化。

虛基類:指虛繼承的基類,主要用於解決從不同路徑多次繼承同乙個基類的問題。

作用:為了突破const的限制而設定。被mutable修飾的變數,將永遠處於可變的狀態,即使在乙個const函式中

例如有個成員函式:

int getvalue() const
12、設x、y、t均為int型變數,則執行語句:t=3; x=y=2; t=x++||++y; 後,變數t和y的值分別為1__2。

注:使用||操作符時,前面的x++為真後就不用再計算後面的++y,所以這裡的y是2

面試總結(一)

又到了一年一度的就業高峰期,作為應屆畢業生中的一員,我也同樣為了自己的工作而奔波,經過乙個多星期的努力,拿下了四五家offer,最後選擇了一家自己比較滿意的公司 下面對求職當中遇到的一些問題進行下總結。一 簡歷準備 乙份好的簡歷是你個人的敲門磚,現在找工作基本上都是通過網上投遞你的簡歷,然後等待公司...

面試總結 一

記錄 2017年8月11日模擬面試問題及答案,許多自己答得很模糊,再次總結語言。面試總結 二 回答基於jdk1.8,低版本部分答案不適用 1.equals和 區別?答 在基礎資料型別中比較其大小,引用型別比較記憶體位址。equals在不重寫的情況下與 相同,重寫後是按照其本身方法內部規則進行判斷。任...

面試總結 (一)

單引號和雙引號的區別 單引號不解析 雙引號解析 在某些特定情況下,單引號效率要比雙引號高 xml和json的區別 js的五種資料型別,並說明原始資料型別和引用資料型別的區別 js的基本資料型別 number string boolean null和undefined 區別 說明myisam和inno...