c++备考期末必看知识点(一篇就够了)
一.關(guān)于C++的常用注釋的三種方法
簡要:
第一種方法:(兩個斜桿)/ /
第二種方法:()/ * * /
第三種方法:使用預處理形式 #if 0 #endif
詳細可以參考該篇
添加鏈接描述
二.c++中的作用域 四類(函數(shù)原型作用域,局部作用域,類作用域,命名空間作用域)
簡要:
1.函數(shù)原型作用域:
此作用域為c++程序中最小的作用域,生存周期最短。
(即函數(shù)形參,在函數(shù)的原型聲明時的括號里面的形參的作用域就是函數(shù)原型作用域。)切記是在函數(shù)聲明中不是定義
例:int func(int i) i為參數(shù),作用域類型為函數(shù)原型類型。
2.局部作用域。
3.類的作用域。
4.命名空間作用域。
詳細可以參考該篇
添加鏈接描述
三.在類中友元函數(shù)運算符重載函數(shù)原型中必須要有一個該類的對象
因為類的友元函數(shù)不能通過對象進行調(diào)用
四.類型兼容型規(guī)則
下面通過題目來展開
1.在需要派生類對象的地方,可以使用基類的對象代替(X)
原因:在需要基類對象的任何地方,都可以用公有派生類的對象來替代。
2.基類對象的地址可以賦值給派生類的指針(X)
原因:
1.基類對象到派生類對象之間的轉(zhuǎn)換是不存在的,編譯器時錯誤,因為基類對象只能是基類對象,它不包含也不能包含派生類的成員,如果允許基類到派生類轉(zhuǎn)換,那么就會試圖使用派生類對象訪問不存在的成員。
2.基類對象的引用或指針到派生類對象的引用或指針也是不存在的,不被允許的,編譯時錯誤,原因同上。
3.派生類的對象可以作為基類的對象來使用,且可以使用所以成員(X)
原因:派生類對象可以作為基類的對象使用,但只能使用基類繼承的成員
4.派生類的對象可以初始化基類的引用(正確)
原因:
1)派生類的對象可以賦值給基類的對象(隱含轉(zhuǎn)化)
2)派生類的對象可以初始化基類的引用(隱含轉(zhuǎn)化)
3)派生類的對象的引用可以初始化基類的引用(隱含轉(zhuǎn)化)
4)派生類對象的地址可以賦給指向基類的指針(這里常用)(隱含轉(zhuǎn)化)
5.把派生類對象的引用或指針轉(zhuǎn)換為基類的引用或指針或,通過基類的引用或指針只能訪問派生類繼承自基類的數(shù)據(jù)成員。
5.內(nèi)聯(lián)函數(shù)
1 內(nèi)聯(lián)函數(shù)必須是和函數(shù)體定義在一起,才有效。像這樣的申明Inline Tablefunction(int I)是沒有效果的,編譯器只是把函數(shù)作為普通的函數(shù)申明,我們必須定義函數(shù)體。 (當然也可以在聲明時放Inline,不過必須在定義前加,聲明前加是可有可無的)
Inline tablefunction(int I) {return I*I};
2.可以將定義在類的外部的函數(shù)定義為內(nèi)聯(lián)函數(shù)。
3 在C++中,在類的內(nèi)部定義了函數(shù)體的函數(shù),被默認為是內(nèi)聯(lián)函數(shù)。而不管你是否有inline關(guān)鍵字。
4.內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一個被調(diào)用之前。
原因:在編譯時,如果在調(diào)用時未出現(xiàn)函數(shù)的定義,編譯器就無法用內(nèi)聯(lián)函數(shù)體來替換調(diào)用函數(shù)的表達式。而普通函數(shù)在編譯時不需要進行替換,因此也就不需要在調(diào)用之前定義。
5.內(nèi)聯(lián)函數(shù)在調(diào)用時,是將調(diào)用表達式用內(nèi)聯(lián)函數(shù)體來替換。
(與宏有區(qū)別)
6.輸入流與輸出流的成員函數(shù)
輸入流:istream
1.getline() 函數(shù)
2.ignore() 函數(shù)
3.ignore() 函數(shù)
4.peek() 函數(shù)
5.putback() 函數(shù)
6.read() 函數(shù)
(read 不會在讀到n-1個字符后停止,也不會在字符串后面自動添加空字符,有亂碼,但getline 可以,)
7.gcount 函數(shù)
8.open()函數(shù)
詳細請參考鏈接:
添加鏈接描述
輸出流:ostream
1:open成員函數(shù)。(也可以是輸入流函數(shù))
2:close成員函數(shù)。
3:put成員函數(shù)。
4:write成員函數(shù)。
5:seekp和tellp。
6:錯誤處理函數(shù)。
7.抽象類(重要)
概念:包含純虛函數(shù)的類稱為抽象類。(不是只有純虛函數(shù))
注意:
1.抽象類只能用作基類來派生新類,不能用抽象類來聲明對象。
原因:因為抽象類中的純虛函數(shù)沒有實現(xiàn)相應的功能。
2.但是可以用抽象類聲明指針或引用,通過指針或引用來調(diào)用派生類對象。
3.純虛函數(shù)在抽象類中只定義不實現(xiàn)。
4.抽象類的指針可以指向不同的派生類。
8.讀取帶空格的字符串
1.getline()函數(shù):
注意:
cin.getline(str,10);
中的str是char *類型。
getline(cin,str);
中的str是string類型。
2.get()函數(shù)
3.不能直接使用read()函數(shù)
原因:read(1,2);有兩個形參,第一個是存儲字符的空間,第二個是讀取的字符長度。
9.C++函數(shù)異常說明
異常說明有如下的幾種形式:
T funNname( parameterlist ) throw( T1, T2,····,Tn);
其中 T 是類型, parameterlist 是參數(shù)列表, 而類型 T1, T2,····,Tn 是函數(shù)會拋出的異常。
T funNname( parameterlist ) throw( );
拋出異常類型列表為空,表示的是該函數(shù)不拋出任何類型異常。
T funNname( parameterlist );
這表示該函數(shù)可以拋出任意類型的異常。
總結(jié):異常說明還是有用的!但更多是寫給函數(shù)用戶看的。讓函數(shù)用戶清楚知道拋出的異常類型,從而更好和正確地在運用此函數(shù)時,編寫對其的異常檢測。
詳細請參考:
添加鏈接描述
10 枚舉變量
以題目為例:
enum fun{a,b=6,c,d=9}中 c的值是7,而不是8.
其余詳細可以參考:
添加鏈接描述
11.異常處理
1.拋出異常 throw()
語法格式:throw 表達式;
注意:
其中, throw后面的表達式可以是常量、變量或?qū)ο蟆T摫磉_式的類型比表達式的值更重要, 因為catch子句在捕獲異常時是根據(jù)throw拋出的表達式的類型進行判斷的, 而不是表達式的值。如果需要通過throw拋出多個異常, 應該通過throw后的表達式的不同類型進行區(qū)分。
2.2.捕獲異常 catch()
基本語法:
catch(異常類型說明符)
{
異常處理語句;
}
有一個比較特殊的可以捕獲所有類型的異常
格式如下:
catch(…)
{
異常處理語句;
}
在執(zhí)行完catch()子句的所有代碼后,程序的控制權(quán)不會重新跳轉(zhuǎn)回拋出異常的函數(shù)中了。
12.重載函數(shù)
1.不能用函數(shù)返回值類型來區(qū)分兩個重載函數(shù)。
2.形參的名字不能用于區(qū)別兩個同名函數(shù)。
3.普通變量與其引用無法區(qū)分。
4.如果形參是指針或引用,帶const 與不帶const 的可以區(qū)分
**
可以用與區(qū)分的是:**函數(shù)的參數(shù)。(包括 參數(shù)個數(shù),類型及順序)。
13.虛基類
1.虛基類與虛函數(shù)的區(qū)別:
虛基類是用來解決繼承時出現(xiàn)的二義性,而虛基函數(shù)是用來解決動態(tài)多態(tài)的綁定問題的。
2.虛基類不是在聲明基類時聲明的,而是在聲明派生類,指定繼承方式時聲明的。
3.虛基類繼承中派生類的構(gòu)造函數(shù):
派生類的構(gòu)造函數(shù)不僅要調(diào)用其直接基類的構(gòu)造函數(shù),還要調(diào)用其間接基類的構(gòu)造函數(shù)。
4.虛基函數(shù)的構(gòu)造函數(shù)只會調(diào)用一次
只由最后定義的派生類來調(diào)用。
14.對象數(shù)組的初始化
1.類似初始化普通數(shù)組的方法;
student str[2]={{1,2},{3,4}};注意:這種方法需要結(jié)合拷貝構(gòu)造函數(shù)
student (const student &); //const student & 格式固定2.```cpp student str[2]={student{1,2},student{3,4}};15.常數(shù)據(jù)成員(const)
1.必須在聲明的同時進行初始化,而且不允許更新。
2.必須通過構(gòu)造函數(shù)的參數(shù)列表初始化方式進行初始化。
(也可以在類中初始化常數(shù)據(jù)成員)
3.一旦賦值后就不再允許改變,但在初始化常數(shù)據(jù)成員時可以用變量為其賦值。
16.靜態(tài)常數(shù)據(jù)成員(static const)
1.必須在類外定義并同時初始化。
(但,如果類型是整型或枚舉類型,則可以在類中定義為其指定初始值)
17.常成員函數(shù)
類型說明符 函數(shù)名 (參數(shù)列表)const;1.在類中聲明和類外定義都需要關(guān)鍵字const;
2.在函數(shù)內(nèi)部不能調(diào)用非常成員函數(shù)。(即不能調(diào)用普通成員函數(shù),)
3.常成員函數(shù)可以用非常對象來調(diào)用,但常對象只能調(diào)用常成員函數(shù)。
4.常成員函數(shù)內(nèi)部不允許進行數(shù)據(jù)成員的修改,但是可以在函數(shù)內(nèi)部輸出const數(shù)據(jù)成員與非數(shù)據(jù)成員!
18. 常對象
const 類名 對象名;1.常對象不允許修改其任何的數(shù)據(jù)成員。
2.常對象必須在定義時初始化,不能被更新。
3.常成員函數(shù)可以用常對象調(diào)用也可以非用常對象調(diào)用,
但是常對象只能調(diào)用常成員函數(shù),不能調(diào)用其他類型的函數(shù)。
19.靜態(tài)數(shù)據(jù)成員(關(guān)鍵詞 static)
用static 聲明的數(shù)據(jù)成員可以被類的所有對象共享。(即,靜態(tài)數(shù)據(jù)成員在內(nèi)存中(像函數(shù)一樣)只有一個副本)。
靜態(tài)數(shù)據(jù)成員的初始化必須在類外部進行。
類型說明符 類名:: 靜態(tài)數(shù)據(jù)成員 =初始值;通常用類名進行訪問。,不過也是可以用對象來訪問的。
基本格式:
類名:: 靜態(tài)數(shù)據(jù)成員;
20.靜態(tài)成員函數(shù)
1.在類外實現(xiàn)時不需要添加static關(guān)鍵詞。
3.靜態(tài)成員函數(shù)只能直接訪問靜態(tài)成員變量和靜態(tài)成員函數(shù);(即不能直接使用普通變量與常變量)
2.可以在靜態(tài)成員函數(shù)中訪問非靜態(tài)成員,不過很麻煩。
因為靜態(tài)成員函數(shù)中沒有this指針。
21.指針常量、常量指針
指針常量,意思為指針(指向的地址)是一個常量(不可以修改)。
常量指針,意思是指向常量的指針。
1、指針常量
數(shù)據(jù)類型 * const 指針變量=變量名;
修飾符const與指針變量緊鄰,說明指針變量不允許修改,既然指針變量的值不能修改,所以一定要在定義的時候給定初值(指向一個確定存在的地方)
p不可以改變,但 *p可以改變
2、常量指針
const 數(shù)據(jù)類型 *指針變量=變量名;
或者 數(shù)據(jù)類型 const * 指針變量=變量名;
定義一個常量指針后,指針指向的值就不能被改變,即不能通過指針變量直接更改指針指向的值。(*p 不可以改變,但p可以改變)
指針常量與常量指針
22.數(shù)組的初始化方式
數(shù)組的初始化方式
字符數(shù)組
23.構(gòu)造函數(shù)
要求:
1.構(gòu)造函數(shù)名要與類名相同;
2.函數(shù)中無返回值類型。
3.沒有return 語句。
4.構(gòu)造函數(shù)可以重載。重載時要避免二義性。(如定義了默認構(gòu)造函數(shù),也定義了不帶參數(shù)的構(gòu)造函數(shù), student s;報錯)
一:委托構(gòu)造函數(shù)
1.委托構(gòu)造函數(shù)在類內(nèi)創(chuàng)建和實現(xiàn)。
2.委托構(gòu)造函數(shù)的參數(shù)小于或等于被委托的構(gòu)造函數(shù)。
委托構(gòu)造函數(shù)
二.調(diào)用的時機
在對象創(chuàng)建時調(diào)用;
24.繼承
1.派生類繼承了父類的除構(gòu)造函數(shù),折構(gòu)函數(shù)和運算符重載函數(shù)之外的所有成員。
一.公有繼承
基類成員的訪問權(quán)限在派生類中不變。
二.保護繼承
基類的所有公有成員和保護成員都作為派生類的保護成員,并且只能被他的派生類的成員函數(shù)或友元函數(shù)訪問。(保護成員在類外無法訪問)
三.私有繼承
基類的公有成員和保護成員都作為派生類的私有成員。
繼承
25.派生類中構(gòu)造函數(shù)的執(zhí)行順序
1.調(diào)用基類構(gòu)造函數(shù),調(diào)用順序按他們繼承時聲明的順序。
2.調(diào)用內(nèi)嵌成員對象的構(gòu)造函數(shù),調(diào)用順序按照他們在類中聲明的順序。
3.派生類的構(gòu)造函數(shù)體中的內(nèi)容。
折構(gòu)函數(shù)的執(zhí)行順序相反。
26.函數(shù)調(diào)用
1 派生類與基類的函數(shù)同名時,派生類會覆蓋掉基類的同名函數(shù),但可以通過::調(diào)用基類中的函數(shù)。
2.若成員函數(shù)與常成員函數(shù)同名,常對象會調(diào)用常成員函數(shù),普通對象會調(diào)用成員函數(shù)
27.虛函數(shù)與動態(tài)多態(tài)
1.虛函數(shù)是實現(xiàn)動態(tài)多態(tài)的基礎(chǔ)。
2.虛函數(shù)所在的類是基類,在派生類中改寫基類中的虛成員函數(shù)。
ps:
1.繼承方式必須是public 繼承(不是 virtual public)
2.派生類中函數(shù)原型必須與基類中的虛函數(shù)的原型完全一致。關(guān)鍵詞 virtual 不加也可,都視為虛函數(shù)。
3.虛函數(shù)只能是類的成員函數(shù),但不能是靜態(tài)數(shù)據(jù)成員函數(shù)。
4.virtual 只能用來說明類聲明中的原型,不能用在函數(shù)實現(xiàn)時。
在使用動態(tài)多態(tài)時兩大前提:
1.基類必須用引用或指針來接受派生類。(將根據(jù)引用或指針指向的對象類型來選擇方法)
2.調(diào)用的函數(shù)在基類中必須是虛函數(shù)。
28. 變量的作用域與生命周期
C++中變量的作用域與生命周期
28.函數(shù)的聲明,定義
函數(shù)的聲明就是告訴編譯器我們想要定義一個函數(shù),并明確規(guī)定其返回值(輸出)、函數(shù)名、參數(shù)表(輸入)
定義函數(shù)的實現(xiàn)功能了,實現(xiàn)函數(shù)功能時,函數(shù)的名稱,返回值,參數(shù)表必須要與此函數(shù)聲明時一致。
ps:
1.函數(shù)原型聲明不是必須的。(即可以只給出函數(shù)定義)
2.函數(shù)原型聲明是形參名可以省略。
3.函數(shù)的定義不可以嵌套。
30.重載,隱藏,覆蓋
重載,隱藏,覆蓋
31.復制(拷貝)構(gòu)造函數(shù)
以下情況會調(diào)用拷貝構(gòu)造函數(shù):
①當函數(shù)的參數(shù)為類的對象時;
②函數(shù)的返回值是類的對象;
③對象需要通過另外一個對象進行初始化。
ps:
1.形參必須是類對象的引用。
2.當函數(shù)的形參為類的對象時,會調(diào)用該類的拷貝構(gòu)造函數(shù)生成一個該類的臨時對象,函數(shù)結(jié)束后被折構(gòu)。
32.友元函數(shù)
1.可以是全局函數(shù)也可以是其它類的函數(shù)。
//全局 friend 類型說明符 友元函數(shù)名(); //其他類的 friend 類型說明符 其它類名::函數(shù)名();2.friend 只在函數(shù)聲明時使用,在函數(shù)定義時不使用。
3.在友元函數(shù)內(nèi)部可以直接訪問類的私有成員。
33.異"^",或(|),與(&)
1.異,相同為0,不同為1;
2|.有一個為1,則為1,否則為0;
3.& 都為1,才為1.
改錯
1.const double pi; pi=3.14; 常量必須初始化且不能修改, const double pi=3.14;2.virtual double area()==0; 應該為 virtual double area()=0; 3. private:double pi=3.14;不能賦值 double pi;4.namespace std 缺少分號 namespace std ;(在類的花括號后邊也要有分號)5.int & a=9;不能將引用指向常量。總結(jié)
以上是生活随笔為你收集整理的c++备考期末必看知识点(一篇就够了)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel中配置VBA的工作环境
- 下一篇: c++中字符与数值之间的转换函数(全网最