最近看一些面試題,覺得如果自己被問到了,並不能很利落的回答出來。
一是從來沒有這個意識,二是沒有認真的梳理下。
1.c和c++中struct有什麼區別?
1> c++中的struct類似於class,有變數,有建構函式、虛函式等,有繼承,多型等類的特徵;
2> c中的struct只有變數,不能有函式,但是可以有函式指標
2.c++中的struct和class有什麼區別?
在c++中,兩者區別不大,但是有2個主要的區別
1>. 繼承許可權:struct預設是public繼承;class預設是private繼承
2>. 訪問許可權:struct預設是public訪問;class預設是private訪問
3.如何判斷一段程式是由c 編譯程式還是由c++編譯程式編譯的?
【標準答案】
#ifdef __cplusplus
cout<<「c++";
#else
cout<<"c";
#endif
(這個以前還真沒注意過,漲姿勢了。。。)
4. c和c++有什麼不同?
【參***】
從機制上:
c是面向過程的(但c也可以編寫物件導向的程式);
c++是物件導向的,提供了類。但是,c++編寫物件導向的程式比c容易。
從適用的方向: c適合要求**體積小的,效率高的場合,如嵌入式; c++適合更上層的,複雜的; llinux核心大部分是c寫的,因為它是系統軟體,效率要求極高。
從名稱上也可以看出,c++比c多了+,說明c++是c的超集;那為什麼不叫c+而叫c++呢,是因為c++比 c來說擴充的東西太多了,所以就在c後面放上兩個+;於是就成了c++。
c語言是結構化程式設計語言,c++是物件導向程式設計語言。 c++側重於物件而不是過程,側重於類的設計而不是邏輯的設計。
關於這個問題,個人覺得《effective c++》上面第一條說的很好,
view c++ as a federation of languages. 把c++當做乙個語言聯邦。
c++由四部分組成
1> c語言部分;
2> 物件導向部分,包括封裝、繼承、多型這些c語言所沒有的特性;
3> 泛型程式設計部分,大多數類、函式要考慮到把它設計成模板,方便復用;
4> stl庫,裡面封裝了大量的優秀模板,是 3> 中內容的整合, 學會使用它們可以讓**更高效。當然,最好去深入了解stl原始碼,那樣會對c++有更深的理解。
5.「引用」與指標的區別是什麼?
【參***】
指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。
程式中使用指標,程式的可讀性差;而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。
在另一本c++著作《more effective c++》裡,第一條就是論述 point 和 reference的區別
總結一下 ,
1> 指標是乙個儲存位址的變數,而引用是乙個變數的別名。所以在乙個函式中,傳引用要比傳指標速度更快。
2> 指標可以指向乙個空值,而引用必須初始化。指標可以如下形式出現
int *p;
是合法但不合理的(相當於是乙個野指標)。
可以宣告乙個指向空值的指標
int *p=null
而引用不行
int &r;
是錯誤的
引用必須初始化為乙個變數的別名,如
int a=5;
int &r=a;
3> 也是因為 2>的特性,指標在使用前要判斷是否為空,而引用必定不為空(否則會報錯),所以不用判斷。
4> 指標可以更改指向的記憶體位址,而引用是和變數繫結的,不可更改。
5> 在運算子過載過程中,通常返回乙個引用往往比返回乙個指標更好,使用指標易引起語義上的歧義。
6.class a
;class b: class a
virtual void func2()
a, a中的func1和b中的func2都是虛函式
b, a中的func1和b中的func2都不是虛函式.
c, a中的func2是虛函式.,b中的func1不是虛函式.
d, a中的func2不是虛函式,b中的func1是虛函式.
【標準答案】a
水題。。
7.int id[sizeof(unsigned long)];這個對嗎?為什麼?
【標準答案】
正確 這個 sizeof是編譯時運算子,編譯時就確定了 可以看成和機器有關的常量。
8.某檔案中定義的靜態全域性變數(或稱靜態外部變數)其作用域是 ()?
a.只限某個函式
b.本檔案 c.跨檔案 d.不限制作用域
【參***】b。靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。
在《c和指標》上看過,static關鍵字會改變具有外部鏈結性的變數和函式
9.c++函式中值的傳遞方式有哪幾種?
【標準答案】
c++函式的三種傳遞方式為:值傳遞、指標傳遞和引用傳遞。
(指標傳遞就是通常說的位址傳遞)
10.對於乙個頻繁使用的短小函式,在c語言中應用什麼實現,在c++中應用什麼實現?
【標準答案】c用巨集定義,c++用inline
define實現的函式功能容易出bug,所以在c++中最好不要使用
未完。。。待續(*^_v_^*)
c 經典面試題
1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...
C 經典面試題
1.輸入乙個字串,將其逆序後輸出。使用c 不建議用偽碼 include using namespace std void main a p malloc 1024 應該寫成 p char malloc 1024 沒有釋放p的空間,造成記憶體洩漏。8.下面的 有什麼問題?並請給出正確的寫法。void ...
C 經典面試題
c 知識總結目錄索引 二 哪些函式不能宣告成虛函式 三 為什麼析構函式和建構函式內不能呼叫虛函式 四 為什麼析構函式最好宣告成虛函式 五 實現乙個不能被繼承的類 六 實現乙個類定義出來的物件都在堆上面 七 實現乙個類定義出來的物件都在棧上面 八 實現乙個類,定義出的物件不能在堆上 九 用c語言實現繼...