国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++程序員面試中常被問到的問題(持續更新)

2019-11-06 06:09:42
字體:
來源:轉載
供稿:網友

C/C++程序占用的內存

棧區— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。堆區 — 一般由程序員分配釋放, 若程序員不釋放,例如malloc、free,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表。全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域,程序結束后有系統釋放文字常量區 —常量字符串就是放在這里的。 程序結束后由系統釋放。 程序代碼區—存放函數體的二進制代碼。

指針和引用的區別

指針是地址,引用是別名可以有const指針,但是沒有const引用; 指針可以有多級 指針的值可以為空,但是引用的值不能為NULL,并且引用在定義的時候必須初始化; 指針的值在初始化后可以改變,即指向其它的存儲單元,而引用在進行初始化后就不會再改變了。“sizeof(&ref)”得到的是所指向的變量(對象)的大小,而”sizeof(*ptr)”得到的是指針本身的大小;

空類的大小及默認的方法

一個空類默認大小為1,如果有虛函數,因為虛函數表與指針的存在,所以在32位機器上,一個類的大小為4。

class EmptyCppClass{ public: EmptyCppClass(); // 缺省構造函數 EmptyCppClass( const EmptyCppClass& ); // 拷貝構造函數 ~EmptyCppClass(); // 析構函數 EmptyCppClass& Operator=( const EmptyCppClass& ); // 賦值運算符 EmptyCppClass* operator&(); // 取址運算符 const EmptyCppClass* operator&() const; // 取址運算符 const};

4. 宏與內聯函數的區別

內聯函數在運行時可調試,而宏定義不可以;編譯器會對內聯函數的參數類型做安全檢查或自動類型轉換(同普通函數),而宏定義則不會;內聯函數可以訪問類的成員變量,宏定義則不能;在類中聲明同時定義的成員函數,自動轉化為內聯函數。

內聯函數的優缺點

優點:提升運行效率,缺點:使二進制文件變得很大。

內聯函數是否能為虛函數

不可以: - 虛函數肯定不會被內聯這一點毋庸置疑,因為虛函數只有到了runtime才能被識別到底是哪一個被調用,而內聯是編譯器就會將代碼展開并安插,這個明顯不是一回事。 - inline有兩種表現方式,一種就是一inline在實現文件中(.cpp)指出,這個被稱為顯示內聯,另外一種將函數聲明和定義放入同一個文件,這種稱為隱式內聯,但是還是如前面所說,inline只是一個提示符,至于會不會內聯還是由編譯器說了算。

虛函數與純虛函數的區別

虛函數一個Virtual就夠了,但是純虛函數還得=0做標識,另外,純虛函數在子類中必須實現,虛函數沒這個說法。

C++中的explicit關鍵字

C++四種轉換類型,與傳統轉換比較的優缺點

static_cast 最常用的類型轉換符,在正常狀況下的類型轉換,如把int轉換為float,如:int i;float f; f=(float)i;或者f=static_cast<float>(i);const_cast 用于取出const屬性,把const類型的指針變為非const類型的指針,如:const int *fun(int x,int y){}  int *ptr=const_cast<int *>(fun(2.3))dynamic_cast 該操作符用于運行時檢查該轉換是否類型安全,但只在多態類型時合法,即該類至少具有一個虛擬方法。dynamic_cast與static_cast具有相同的基本語法,dynamic_cast主要用于類層次間的上行轉換和下行轉換,還可以用于類之間的交叉轉換。在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換時,dynamic_cast具有類型檢查的功能,比static_cast更安全。reinterPRet_cast interpret是解釋的意思,reinterpret即為重新解釋,此標識符的意思即為數據的二進制形式重新解釋,但是不改變其值。如:int i; char *ptr="hello freind!"; i=reinterpret_cast<int>(ptr);這個轉換方式很少使用。

函數指針與指針函數

指針函數 先看下面的函數聲明,注意,此函數有返回值,返回值為int *,即返回值是指針類型的。int *f(int a, int b); 函數指針 函數指針說的就是一個指針,但這個指針指向的函數,不是普通的基本數據類型或者類對象。函數指針的定義如下:int (*f)(int a, int b); // 聲明函數指針

什么是復制構造函數(深拷貝與淺拷貝)

const int p與int const p和const int const *p區別

const int *p; // const修飾的是*p,因此*p是常量不能改變,但可以改變p的指向;int const* p;// 同上,主要是看const與*的前后關系;int* const p; // const修飾的是p,因此p的指向是常量不能改變,但*p可以改變;const int const *p; // 兩個const既修飾了*p也修飾了p,因此*p與p都是常量不能改變;

C++ 11種的新特征

繼承類中的虛函數

malloc, new, free, delete的區別

malloc, free是操作符,只能對內置類型進行分配,new,delete是函數,可以對自定義類型進行內存分配,new的調用會調用構造函數,malloc則沒有。

類與結構體的區別

類成員默認為private,struct默認為public;

C++類能有它自身類型的對象嗎?

C++類可以有自身類型的對象,但是不是簡單的直接定義對象,它可以定義靜態的自身類型對象或者是自身類型的指針。

析構函數是否可以為虛函數,默認的呢?

析構函數可以為虛函數,而且應該標為虛函數,這是為了防止析構函數在析構父類的時候沒有析構子類,這樣會造成內存泄漏。而默認的析構函數不是虛函數。

構造函數是否可以為虛函數?

構造函數絕對不能為虛函數,因為構造函數的調用必須要確定構造出的類,這個是在編譯器決定的,虛函數是在運行時決定的,所以不可以。

寫一個不可繼承的類

參考這里:http://zhedahht.blog.163.com/blog/static/25411174200793181548842/

拷貝構造函數可以私有嗎?

當然可以私有,只不過private以后就不能再進行拷貝了。

為什么拷貝構造函數的參數是引用?

這是為了防止循環調用構造函數,造成死循環。

啥時候需要重寫默認的復制構造函數?

一般來說不需要重寫復制構造函數,除非默認的復制構造函數提供的淺拷貝不能滿足需求了才重寫。

啥時候調用復制構造函數?

類數據成員的初始化

類數據成員的初始化只要記住初始化順序跟定義順序是一致的就可以了。

析構函數可以私有嗎?

可以是可以,但是得需要重寫一個類似于析構函數的函數,只有這樣才能正常地釋放對象。

為什么復制構造函數參數是const

這個已經涉及到了C++03的標準,它規定賦值的左值是const,所以右值也應該是const。

靜態對象何時被銷毀?

因為靜態周期生命周期要比其他對象要長,所以靜態對象一定是在函數結束的最后被銷毀的。

虛函數可以是靜態的嗎?

不可以,虛函數必須有對象操作,靜態的話就跟對象沒關系了,就這一點就矛盾了,所以虛函數不能為static。

迭代器循環中++iter與iter++有什么區別?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 南漳县| 菏泽市| 四平市| 高清| 定兴县| 贵定县| 绥阳县| 平和县| 平利县| 高雄市| 宣城市| 巨野县| 河南省| 萝北县| 建德市| 邹平县| 南昌市| 萨嘎县| 彭山县| 定远县| 隆化县| 大荔县| 海安县| 昭苏县| 南陵县| 化州市| 巴林左旗| 阿克陶县| 湘阴县| 揭东县| 贞丰县| 惠州市| 额尔古纳市| 龙口市| 万载县| 青阳县| 八宿县| 海安县| 正蓝旗| 东城区| 渭源县|