(1)從設計思想上看,c++是物件導向的語言,c是面向過程的結構化程式設計。
(2)從語法上看,c++具有封裝、繼承、多型三種特性;c++增加了許多態別安全功能,比如強制型別轉換;c++支援正規化程式設計,比如模板類、函式模板等。
定義全域性靜態變數、區域性靜態變數、靜態函式、類的靜態成員、類的靜態函式。
(1)全域性靜態變數:
在全域性變數前加上關鍵字static,全域性變數就定義成乙個全域性靜態變數.
● 記憶體中的位置:靜態儲存區,在整個程式執行期間一直存在。
● 初始化:未經初始化的全域性靜態變數會被自動初始化為0 (自動物件的值是任意的,除非他被顯式初始化) ;
● 作用域:全域性靜態變數在宣告他的檔案之外是不可見的,準確地說是從定義之處開始,到檔案結尾。
(2)區域性靜態變數
在區域性變數之前加上關鍵字static,區域性變數就成為乙個區域性靜態變數。
● 記憶體中的位置:靜態儲存區
● 初始化:未經初始化的全域性靜態變數會被自動初始化為0 (自動物件的值是任意的,除非他被顯式初始化) ;
● 作用域:作用域仍為區域性作用域,當定義它的函式或者語句塊結束的時候,作用域結束。但是當區域性靜態變數離開作用域後,並沒有銷毀,而是仍然駐留在記憶體當中,只不過我們不能再對它進行訪問,直到該函式再次被呼叫,並且值不變;
(3)靜態函式
在函式返回型別前加static,函式就定義為靜態函式。
● 函式的定義和宣告在預設情況下都是extern的,但靜態函式只是在宣告他的檔案當中可見,不能被其他檔案所用。
● 函式的實現使用static修飾,那麼這個函式只可在本cpp內使用,不會同其他cpp中的同名函式引起衝突;
**注:**不要再標頭檔案中宣告static的全域性函式,不要在cpp內宣告非static的全域性函式,如果你要在多個cpp中復用該函式,就把它的宣告提到標頭檔案裡去,否則cpp內部宣告需加上static修飾;
(4)類的靜態成員
在類中,靜態成員可以實現多個物件之間的資料共享,並且使用靜態資料成員還不會破壞隱藏的原則,即保證了安全性。因此,靜態成員是類的所有物件中共享的成員,而不是某個物件的成員。對多個物件來說,靜態資料成員只儲存一處,供所有物件共用。
(5)類的靜態函式
靜態成員函式和靜態資料成員一樣, 它們都屬於類的靜態成員,它們都不是物件成員。因此,對靜態成員的引用不需要用物件名。
在靜態成員函式的實現中不能直接引用類中說明的非靜態成員,可以引用類中說明的靜態成員(這點非常重要)。如果靜態成員函式中要引用非靜態成員時,可通過物件來引用。
從中可看出,呼叫靜態成員函式使用如下格式,< 類名》::《靜態成員函式名》(《參數列》):
那麼,如何回答這個問題?
對於函式定義和**塊之外的變數宣告,static修改識別符號的鏈結屬性,由預設的external變為internal, 作用域和儲存型別不改變,這些符號只能在宣告它們的原始檔中訪問。
對於**塊內部的變數宣告,static修改識別符號的儲存型別,由自動變數改為靜態變數,作用域和鏈結屬性不變。這種變數在程式執行之前就建立,在程式執行的整個週期都存在。
對於被static修飾的普通函式,只能在定義它的原始檔中使用,不能在其他原始檔中被引用
對於被static修飾的類成員變數和成員函式,它們是屬於類的,而不是某個物件,所有物件共享乙個靜態成員。 靜態成員通過《類名》::《靜態成員》來使用。
c++中四種型別轉換是:static_cast 、dynamic_cast 、const_cast 、reinterpret_cast
(1)static_cast:用於各種隱式轉換,比如非const轉const,void*轉指標等。static_cast能用於多型向上轉化,如果向下轉能成功但是不安全,結果未知。
(2)dynamic_cast:用於動態型別轉換。只能用於含有虛函式的類,用於類層次間的向上和向下轉化。只能轉指標或引用。向下轉化時,如果是非法的對於指標返回null,對於引用拋異常。
向上轉換:指的是子類向基類的轉換;
向下轉換:指的是基類向子類轉換。
(3)const_cast:將const變數轉變為非const變數;
(4)reinterpret_cast:幾乎什麼都可以轉,但是轉化不夠明確,不能進行錯誤檢查,容易出錯,盡量少用。
C 面試準備日記1 redis
redis是乙個開源的 基於記憶體的 key value資料庫,並提供多種語言的api。redis是乙個儲存系統,它指出儲存的value型別相對多,包括string list 鍊錶 set 集合 zset 有序集合 這些資料型別都支援push pop add remove等操作。redis為了保證效...
C 面試準備日記 指標 引用 一)
引用是c 對c語言的重要擴充,引用就是某一變數的乙個別名,對引用的操作與對變數直接操作完全一樣。指標儲存位址,它的值直接指向在電腦儲存器中某乙個地方的值。由於通過位址可以找到所需的變數單元,因而可以說,位址指向該變數單元。因此,將位址形象化地稱為指標,意思是通過它能找到以它為位址的記憶體單元。區別 ...
面試準備c (二)
stl容器和底部原理 二倍增長的動態陣列,線性連續空間,有容量限制。每次擴大到二倍時要重置所有迭代器,開銷很大 deque 雙端佇列 雙向開口的儲存空間分段連續的資料結構,每段資料空間內部是連續的,而每段資料空間之間則不一定連續 正因為段之間不連續,所以他整體也是不連續的,不用擔心容量問題 list...