C++ 筆記(面試總結 一 )

C++面試問題總結(一)

1.static

static + 全局變量 = 全局靜態變量
兩者都是使用靜態存儲方式,但是全局變量作用域是全局的,整個源程序的源文件都可以訪問,而全局靜態變量只有定義的源文件可以訪問。
static全局變量只初始化一次,防止在其他文件單元中引用。

static + 局部變量 = 局部靜態變量
前者是用棧儲存,後者是數據區儲存,生命週期變長

static函數在內存中只有一份,不能訪問非static變量。
普通函數在每個被調用中維持一份拷貝儲存在棧中。

可以在被多個源文件包含的頭文件中聲明static全局變量,但只能有一個源文件對其賦值。而且不需要創建對象就可以訪問,所以要先於對象存在,要在類外初始化。

2.const
const變量表示只讀
用const來修飾指針

const int* a;  //const修飾指向類型,表示指向的a爲常量,a值不可變,指針可以指向其它地址
int* const a ; //指針本身爲常量,不可以修改其指向其它地址

const修飾函數int add (int a,int b) const { ....}
不能修改對象的成員變量,也不能調用非const函數

3.函數傳參

傳值:函數開始時形成棧幀,形參是實參的拷貝,改變形參不會改變實參
傳指針:函數開始時形成棧幀,形參就是實參的地址,可改變實參
傳引用:引用定義出來的形參變量相當於實參變量的別名,也就是說形參等同於實參,它們雖是兩個不同的變量名,指向的是同一塊內存地址,對形參操作實參也會改變。

4.c和c++區別
對語言本身而言,C是C++的子集,那麼是什麼樣的一個子集? C實現了C++中過程化控制及其它相關功能,而在C++中的C(我稱它爲“C+”),相對於原來的C還有所加強,引入了重載、內聯函數、異常處理等等玩意兒,C++更是拓展了面向對象設計的內容,如類、繼承、虛函數、模板和包容器類等等。

5.java和c++

通常,我們聊到Java,第一印象“面向對象”,“沒有指針,編寫效率高,執行效率較低”。更深入、專業一點就談論 “java內存自動回收(GC垃圾回收機制),多線程編程”。
java的三大特性是封裝、繼承和多態。

1、 JAVA的應用在高層,C++在中間件和底層

2、 JAVA離不開業務邏輯,而C++可以離開業務爲JAVA們服務

3、 java語言給開發人員提供了更爲簡潔的語法;取消了指針帶來更高的代碼質量;完全面向對象,獨特的運行機制是其具有天然的可移植性。

4、 java 是運行在JVM上的,之所以說它的可移植性強,是因爲jvm可以安裝到任何的系統

5、 c++不是不能在其他系統運行,而是c++在不同的系統上運行,需要不同的編碼(這一點不如java,只編寫一次代碼,到處運行)。java程序一般都是生成字節碼,在JVM裏面運行得到結果。

6、 java 在web 應用上具有c++ 無可比擬的優勢

7、 java在桌面程序上不如c++實用,C++可以直接編譯成exe文件,指針是c++的優勢,可以直接對內存的操作,但同時具有危險性 。(操作內存的確是一項非常危險的事情,一旦指針指向的位置發生錯誤,或者誤刪除了內存中某個地址單元存放的重要數據,後果是可想而知的)。

8、 垃圾回收機制的區別。c++用析構函數回收垃圾,java自動回收(GC算法),寫C和C++程序時一定要注意內存的申請和釋放。

9、 java 豐富的插件是java 發展如此迅速的原因
10、 java 很大的沿襲了c++的一些實用結構
11、 對於底層程序的編程以及控制方面的編程,c++很靈活,因爲有句柄的存在。

Java並不僅僅是C++語言的一個變種,它們在某些本質問題上有根本的不同:

(1)Java比C++程序可靠性更高。有人曾估計每50行C++程序中至少有一個BUG。姑且不去討論這個數字是否誇張,但是任何一個C++程序員都不得不承認C++語言在提供強大的功能的同時也提高了程序含BUG的可能性。Java語言通過改變語言的特性大大提高了程序的可靠性。

(2)Java語言不需要程序對內存進行分配和回收。Java丟棄了C++ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉換。特別地,Java語言不使用指針,並提供了自動的廢料收集,在Java語言中,內存的分配和回收都是自動進行的,程序員無須考慮內存碎片的問題。

(3)Java語言中沒有指針的概念,引入了真正的數組。不同於C++中利用指針實現的“僞數組”,Java引入了真正的數組,同時將容易造成麻煩的指針從語言中去掉,這將有利於防止在c++程序中常見的因爲數組操作越界等指針操作而對系統數據進行非法讀寫帶來的不安全問題。

(4)Java用接口(Interface)技術取代C++程序中的多繼承性。接口與多繼承有同樣的功能,但是省卻了多繼承在實現和維護上的複雜性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章