C++面试常见问题整理汇总(面试者必看哦!)
1. 繼承方式
public ??? 父類的訪問級別不變
#include <iostream> using namespace std; class base { public: void printa() { cout <<"base"<< endl; } protected: void printhello() { cout <<"helo"<< endl; } private: void printnohello() { cout <<"no hello"<< endl; } }; class derived : public base { public: void printb() { printhello(); } // void printc() { printnohello(); } //printnohello是父類的私有函數,不可訪問 }; int main() { base a; a.printa(); //a.printhello(); //printhello是類derived的protected函數,不可訪問。 }2. sizeof 和 strlen 的區別
① sizeof 是一個操作符,strlen 是庫函數。
#include <iostream> #include <cstdlib> #include <cstring> using namespace std; int main() { int a[] = {1, 2, 3, 4, 5}; cout << sizeof(a) << endl; //20 // cout << strlen(a) << endl; char b[] = {'a', 'b'}; cout << strlen(b) << endl; //6 cout << sizeof(b) << endl; //2 }3. C中的 malloc 和C++中的 new 有什么區別
new、delete 是操作符,可以重載,只能在 C++中使用。
注意:malloc 申請的內存空間要用 free 釋放,而 new 申請的內存空間要用 delete 釋放,不要混用。
因為兩者實現的機理不同。
4.簡述C\C++程序編譯的內存情況分配
C、C++中內存分配方式可以分為三種:
(1)從靜態存儲區域分配:內存在程序編譯時就已經分配好,這塊內存在程序的整個運行期間都存在。速度快、不容易出錯,因為有系統會善后。例如全局變量,static變量等。
一個 C、C++程序編譯時內存分為 5 大存儲區:堆區、棧區、全局區、文字常量區、程序代碼區。
5. 面向對象的三大特征
① 封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
覆蓋,是指子類重新定義父類的虛函數的做法。
總結:作用
① 封裝可以隱藏實現細節,使得代碼模塊化
6. 簡述多態的實現原理
編譯器發現一個類中有虛函數,便會立即為此類生成虛函數表vtable。虛函數表的各表項為指向對應虛函數的指針。編譯器還會在此類中隱含插入一個指針 vptr指向虛函數表。調用此類的構造函數時,在類的構造函數中,編譯器會隱含執行 vptr 與 vtable 的關聯代碼,將 vptr 指向對應的 vtable,將類與此類的 vtable 聯系了起來。另外在調用類的構造函數時,指向基礎類的指針此時已經變成指向具體的類的 this 指針,這樣依靠此 this 指針即可得到正確的 vtable。
如此才能真正與函數體進行連接,這就是動態聯編,實現多態的基本原理。
注意:一定要區分虛函數,純虛函數、虛擬繼承的關系和區別。牢記虛函數實現原理,因為多態C++面試的重要考點之一,而虛函數是實現多態的基礎。
7. c++空類的成員函數
缺省的構造函數
注意:只有當實際使用這些函數的時候,編譯器才會去定義它們。
8. 談談你對拷貝構造函數和賦值運算符的認識
兩個不同之處:
① 拷貝構造函數生成新的類對象,而賦值運算符不能。
注意:當有類中有指針類型的成員變量時,一定要重寫拷貝構造函數和賦值運算符,不要使用默認的。
9. extern 有什么作用
extern 標識的變量或者函數聲明其定義在別的文件中,提示編譯器遇到此變量和函數時在其它模塊中尋找其定義。
10. 引用和指針區別
① 引用必須被初始化,但是不分配存儲空間。指針不必在聲明時初始化,在初始化的時候需要分配存儲空間
完
它,
不僅僅是一個碼
掃碼關注
C++資源免費送
總結
以上是生活随笔為你收集整理的C++面试常见问题整理汇总(面试者必看哦!)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优酷怎么登陆别人的会员(优酷客户端下载中
- 下一篇: C++ vector使用的一些注意事项