C 基礎面試題

2021-09-28 19:07:32 字數 2815 閱讀 8401

c/c++

struct aa

int a;

char b;

struct student

純虛函式的定義形式:virtual  = 0;

在虛函式和純虛函式的定義中不能有static識別符號,原因很簡單,被static修飾的函式在編譯時候要求前期bind,然而虛函式卻是動態繫結(run-time bind),而且被兩者修飾的函式生命週期(life recycle)也不一樣。

10. 多型性指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。c++支援兩種多型性:編譯時多型性,執行時多型性。

a.編譯時多型性:通過過載函式實現

b 執行時多型性:通過虛函式實現。

11. 如果乙個類中含有純虛函式,那麼任何試圖對該類進行例項化的語句都將導致錯誤的產生,因為抽象基類(abc)是不能被直接呼叫的。必須被子類繼承過載以後,根據要求呼叫其子類的方法。

new和delete、new[ ]和delete[ ]一定要匹配使用,一定要匹配使用,一定要匹配使用!!!否則會出現記憶體洩漏甚至崩潰的問題

【new作用】

呼叫operator new 分配空間。

呼叫建構函式初始化物件。

【delete作用】

呼叫析構函式清理物件。

呼叫operator delete釋放空間。

string ---long int:

int main ()

string a = "1234567890";

long b = atoi(a.c_str());

cout

string lint_str(long int i_str)

stringstream os;

osos>>s;

return s;

#include

using namespace std;

void func(void* t)

cout << "func1" << endl;

void func(int i)

cout << "func2" << endl;

int main()

func(null);

func(nullptr);

return 0;

輸出:func1 、func2

null和nullptr都是代表空指標,但是null在過載函式的時候卻匹配到了引數為int的那個版本。

其實null在c++中就是代表著0,這是因為在c++中void* 型別是不允許隱式轉換成其他型別的,所以c++中用0來代表空指標,但是在過載整形的情況下,會出現上述的問題。所以,c++11加入了nullptr,可以保證在任何情況下都代表空指標,而不會出現上述的情況,因此,建議以後還是都用nullptr替代null吧。

delete 釋放new分配的單個物件指標指向的記憶體

delete 釋放new分配的物件陣列指標指向的記憶體

在有虛函式的類的例項中這個表被分配在了這個例項的記憶體中,所以,當我們用父類的指標來操作乙個子類的時候,這張虛函式表就顯得由為重要了,它就像乙個地圖一樣,指明了實際所應該呼叫的函式。

在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。

一、結構體struct

各成員各自擁有自己的記憶體,各自使用互不干涉,同時存在的,遵循記憶體對齊原則。乙個struct變數的總長度等於所有成員的長度之和。

二、聯合體union

各成員共用一塊記憶體空間,並且同時只有乙個成員可以得到這塊記憶體的使用權(對該記憶體的讀寫),各變數共用乙個記憶體首位址。

#include

//聯合體

struct u4

int a;

char b;

short c;

}u5;

struct u5

char b;

int a;

short c;

}u6;

//主函式

int main()u3;

//主函式

int main(){

printf("%d\n",sizeof(u3));//輸出24

return 0;

引用不可以為空,但指標可以為空,引用是物件的別名,引用為空——物件都不存在,怎麼可能有別名.

故定義乙個引用的時候,必須初始化。引用不可以改變指向;但是指標可以改變指向,而指向其它物件。雖然引用不可以改變指向,但是可以改變初始化物件的內容。

引用的大小是所指向的變數的大小,因為引用只是乙個別名而已;指標是指標本身的大小,4個位元組。

當你寫這種**:

string *ps = new string("memory management");

你使用的new是new  operator。

new操作符做兩件事,分配記憶體+呼叫建構函式初始化。

operator new所了解的是記憶體分配,它對建構函式一無所知。

四種轉換:static_cast、dynamic_cast、const_cast和reinterpre_cast.

多個同名函式有不同的引數集

編譯器根據不同引數的型別和個數產生呼叫匹配

函式過載用於處理不同資料型別的類似任務

函式名稱必須相同。

引數列表必須不同(個數不同、型別不同、引數排列順序不同等)。

函式的返回型別可以相同也可以不相同。

僅僅返回型別不同不足以成為函式的過載。

c 基礎 面試題

6 章 函式 15 章 物件導向程式設計 16章 模板與泛型程式設計 演算法題c 有哪些性質?封裝 繼承 多型 封裝 實現了類的介面和實現的分離,隱藏類的具體實現,只提供給使用者介面。可以通過訪問說明符實現 public private protected 繼承 從父類得到已有的特性,拓展已存在的 ...

C 基礎經典面試題

1.請問以下 有什麼問題 int main 沒有為str分配記憶體空間,將會發生異常 問題出在將乙個字串 複製進乙個字元變數指標所指位址。雖然可以正確輸出結果,但因為越界進行記憶體讀寫而導致程式崩潰。char s aaa printf s s s 0 b printf s s 有 什麼錯?aaa 是...

C 基礎面試題(一)

1.簡答介紹物件的構成,並做出說明 物件的構成 屬性,方法,事件 屬性 乙個物件與生俱來的,方法 乙個物件的主動行為,事件 乙個物件的被動行為 2.c 中15中屬性型別分別是哪些 值型別 整數8種 byte,sbyte,short,ushort,int,uint,long,ulong,小數三種 fl...