C 常用知識點 I

2021-10-06 03:45:12 字數 3494 閱讀 4744

1、純虛函式

純虛函式是只有宣告沒有定義的虛函式,是對子類的約束,是介面繼承。

包含純虛函式的類是抽象類,不能例項化,只有實現了純虛函式的子類才能例項化建立物件。

2、typedef 和 define 區別

#define是預處理命令,在預處理是執行簡單的替換,不做正確性的檢查

typedef是在編譯時處理的,它是在自己的作用域內給已經存在的型別乙個別名

typedef    (int*)      pint;

#define    pint2   int*

3、型別強制轉換

型別轉化機制可以分為隱式型別轉換和顯示型別轉化(強制型別轉換)

(new-type) expression

new-type (expression)

隱式型別轉換比較常見,在混合型別表示式中經常發生;四種強制型別轉換操作符:

static_cast、dynamic_cast、const_cast、reinterpret_cast

1)static_cast :編譯時期的靜態型別檢查

static_cast < type-id > ( expression )
該運算子把expression轉換成type-id型別,在編譯時使用型別資訊執行轉換,在轉換時執行必要的檢測(指標越界、型別檢查),其運算元相對是安全的

2)dynamic_cast:執行時的檢查

用於在整合體系中進行安全的向下轉換downcast,即基類指標/引用->派生類指標/引用

dynamic_cast是4個轉換中唯一的rtti操作符,提供執行時型別檢查。

dynamic_cast如果不能轉換返回null

源類中必須要有虛函式,保證多型,才能使用dynamic_cast(expression)

3)const_cast

去除const常量屬性,使其可以修改 ; volatile屬性的轉換

4)reinterpret_cast

4、extern "c"作用

#ifdef __cplusplus //c++編譯環境中才會定義__cplusplus (plus就是"+"的意思),如果是c++程式,肯定會有__cplusplus

extern "c"

#endif

5、友元函式和友元類

友元提供了不同類的成員函式之間、類的成員函式和一般函式之間進行資料共享的機制。

通過友元,乙個不同函式或者另乙個類中的成員函式可以訪問類中的私有成員和保護成員

友元的正確使用能提高程式的執行效率,但同時也破壞了類的封裝性和資料的隱藏性,導致程式可維護性變差。

1)友元函式

友元函式是可以訪問類的私有成員的非成員函式。它是定義在類外的普通函式,不屬於任何類,但是需要在類的定義中加以宣告。

friend 型別 函式名(形式引數);

乙個函式可以是多個類的友元函式,只需要在各個類中分別宣告。

2)友元類

友元類的所有成員函式都是另乙個類的友元函式,都可以訪問另乙個類中的隱藏資訊(包括私有成員和保護成員)。

friend class 類名; 

使用友元類時注意: 

(1) 友元關係不能被繼承。 

(2) 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定是類b的友元,要看在類中是否有相應的宣告。 

(3) 友元關係不具有傳遞性。若類b是類a的友元,類c是b的友元,類c不一定是類a的友元,同樣要看類中是否有相應的申明

6、過載overload,覆蓋override,重寫overwrite,這三者之間的區別

1)overload,將語義相近的幾個函式用同乙個名字表示,但是引數和返回值不同,這就是函式過載

特徵:相同範圍(同乙個類中)、函式名字相同、引數不同、virtual關鍵字可有可無

2)override,派生類覆蓋基類的虛函式,實現介面的重用

特徵:不同範圍(基類和派生類)、函式名字相同、引數相同、基類中必須有virtual關鍵字(必須是虛函式)

3)overwrite,派生類遮蔽了其同名的基類函式

特徵:不同範圍(基類和派生類)、函式名字相同、引數不同或者引數相同且無virtual關鍵字

7、c++檔案編譯與執行的四個階段

1)預處理:根據檔案中的預處理指令來修改原始檔的內容

2)編譯:編譯成彙編**

3)彙編:把彙編**翻譯成目標機器指令

8、c++的記憶體管理

在c++中,記憶體被分成五個區:棧、堆、自由儲存區、靜態儲存區、常量區

棧:存放函式的引數和區域性變數,編譯器自動分配和釋放

堆:new關鍵字動態分配的記憶體,由程式設計師手動進行釋放,否則程式結束後,由作業系統自動進行**

自由儲存區:由malloc分配的記憶體,和堆十分相似,由對應的free進行釋放

全域性/靜態儲存區:存放全域性變數和靜態變數

常量區:存放常量,不允許被修改

9、靜態繫結和動態繫結的介紹

靜態繫結和動態繫結是c++多型性的一種特性

1)物件的靜態型別和動態型別

靜態型別:物件在宣告時採用的型別,在編譯時確定

動態型別:當前物件所指的型別,在執行期決定,物件的動態型別可變,靜態型別無法更改

2)靜態繫結和動態繫結

靜態繫結:繫結的是物件的靜態型別,函式依賴於物件的靜態型別,在編譯期確定

動態繫結:繫結的是物件的動態型別,函式依賴於物件的動態型別,在執行期確定

只有虛函式才使用的是動態繫結,其他的全部是靜態繫結

10、什麼情況下會呼叫拷貝建構函式(三種情況)

系統自動生成的建構函式:普通建構函式和拷貝建構函式 (在沒有定義對應的建構函式的時候)

生成乙個例項化的物件會呼叫一次普通建構函式,而用乙個物件去例項化乙個新的物件所呼叫的就是拷貝建構函式

呼叫拷貝建構函式的情形:

1)用類的乙個物件去初始化另乙個物件的時候

2)當函式的引數是類的物件時,就是值傳遞的時候,如果是引用傳遞則不會呼叫

3)當函式的返回值是類的物件或者引用的時候

C 常用知識點

excel資料分析與視覺化codeblocks開啟專案,需要open cbp檔案,才能將整個專案匯入,不能開啟main.cpp檔案 利用 notepad 解決中文亂碼。gb2312 ansi windows926 untf 8 codeblock 調整字型大小 ctrl 滑鼠滾輪 mac系統下檔案編...

C 常用知識點

1.按有效位輸出是 setprecision,按小數字數輸出也是setprecision,但到底是誰取決於fixed。cout resetiosflags ios fixed setprecision n float point number 是按n位有效數輸出 cout setiosflags i...

C 常用知識點

獲取英文月份名稱 datetime.now.tostring mmmm 1.1 各個字母所代表的意思 1.mm 月份 2.mm 分鐘 3.mmmm 文字形式月份 4.mmm 三個字母縮寫的月份 4.hh 24小時制 5.hh 12小時制 6.ddd 三個字母縮寫的星期 7.dddd 完整的星期 8....