昨天的複習讓自己有不小的收穫,對一些基礎知識也有了更加深刻的理解,所以今天在昨天的複習基礎上繼續往
後複習,鞏固:
(1)繼承時的名字遮攔:
派生類的成員和基類中的成員重名,那麼就會遮攔從基類繼承過來的成員,派生類在使用該成員時,實際上是派
生類新增的成員,不是從基類中繼承來的;
在基類和派生類中,不管是成員變數,還是成員函式,只要名字一樣就會造成遮蔽;
(2)派生類的建構函式:
建構函式不能被繼承,派生類的建構函式可以呼叫基類的建構函式類實現;
如:student::student(char *name, int age,float score):people(name,age), m_score(score){},在這裡people類是
student類的基類;
(3)建構函式和析構函式的呼叫順序:
派生類建構函式中只能呼叫直接基類的建構函式,不能呼叫間接基類的建構函式;基類的析構函式不能被繼承;
舉個例子吧: 基類a,派生出b,b再派生出c;
則它們的構造函式呼叫順序為:a,b,c
析構函式呼叫順序為:c, b, a
(4)多繼承類:
class c:public a, public b, public d;
多繼承下的建構函式,和單繼承一樣,都是呼叫基類的建構函式;
(5)命名衝突:
當多繼承的時候,如果c分別從a和b繼承函式,如果是函式名有相同,編譯器會報錯,這個時候要加上::來進
行說明;
(6)引用:
相當於乙個別名,語法格式:type &name = data;
int xiaow;
int &xiaog = xiaow;
a. &不是位址預演算法,是乙個引用運算子;
b. xiaog,xiaow變數的位址和值都是一樣;
c. 引用只能初始化,不能先宣告後賦值,相當於乙個常量;
d. 在宣告乙個引用的時候必須初始化;
e. 這個別名別人不能用,只能這個變數使用;改變變數的值,這個別名的值也會改變;
開始定義初始化的時候&表示引用運算子;
引用初始化後,&表示區位址運算子;
可以對物件和變數進行引用,但是不能對類進行引用,因為類沒有記憶體位址;
(7)引用和指標的比較:
a. 指標可以是空的,引用不能為空;
b. 指標可以改變,引用初始化了,引用就不能改變成別的引用;
c. 在堆上建立了一塊記憶體,必須使用指標指向;不能使用引用;
(8)虛函式:
有了虛函式才能構成多型;
a. 在虛函式的宣告前加virtual關鍵字,在定義處可加可不加;
b. 只在基類的相關函式前加virtual,在派生類中有遮蔽關係函式名引數都一樣的都會自動轉為虛函式;
c. 基類中宣告虛函式,在派生類沒有定義遮蔽關係的函式,自動呼叫其基類的虛函式;
d. 派生類的虛函式遮蔽基類虛函式,才能構成多型;
e. 建構函式不能是虛函式;
f. 析構函式可以宣告為虛函式,有的時候必須宣告為虛函式
(9)虛析構的必要性:
創造的基類指標pa指向派生類位址的時候,在釋放位址delete pa的時候,只釋放基類的析構函式,不釋放派生類
的析構函式;因為pa是基類的指標,只能釋放基類析構;
如果要是一起釋放基類和派生類,要把基類的析構函式設定成虛析構,這樣可以繼承。
(10)靜態繫結和動態的繫結:
a. 靜態繫結:指在編譯過程中就能確定所呼叫的是哪乙個函式。又稱為編譯時多型性;
主要是函式過載,運算子過載;
b. 動態的多型性: 在程式執行的時候才能確定是哪乙個函式。又稱為執行時多型。
主要是繼承和虛函式。
非虛函式都是靜態繫結,虛函式都是動態繫結;
(11)純虛函式和抽象類:
語法格式:
virtual 返回值型別 函式名(引數) = 0;
a. 純虛函式沒有函式體,之有 宣告;=0 只表示是純虛函式,
b. =0 不表示返回值是0,只是乙個形式,告訴編譯器這是純虛函式
c. 包含純虛函式的類稱為抽象類;
d. 抽象類通常稱為基類,讓派生類去實現純虛函式,派生類必須實現純虛函式才能被例項化;
純虛函式注意:
a. 乙個純虛函式可以使類成為抽象基類,但是抽象基類裡面除了包含純虛函式外,還可以包含其他的成員函式
和變數;
b. 只有類中的虛函式才能宣告為純虛函式,普通的成員函式和頂層函式不能宣告為純虛函式。
(12)typeid的運算子:獲取表示式的型別資訊
格式:
typeid( datatype )
typeid( expression )
datatype 是資料型別,expression 是表示式,
type_info的成員函式:
a. name()返回型別的名稱;
b. raw_name()用來返回名字編碼;
c.hash_code()用來返回當前型別的函式值
(13)過載:
函式過載: 讓乙個函式名有多種功能; 可以在不同情況下進行不同的操作;
運算子過載:讓乙個運算子具有不同的功能;
運算子過載的格式:
返回值 operator 預算符名稱(形參列表)
{ //函式體;
}(14)運算子過載的規則:
a . 不是所有的都可以,大部分就可以過載:
不能過載的:
sizeof, 條件運算子?, 成員選擇符. 物件選擇符. * 域的解析符::
b. 過載不能改變運算子的優先順序和結合性:
c1,c2,c3,c4
c4 =c1+c2*c3;
先執行c2*c3, 然後+c1 = c4;
c. 過載不會改變運算子的用法,
d. 不能有預設的引數,否則改變了運算子操作的個數。錯誤的。
e. 可以作為類的成員函式,也可以作為全域性函式;
f. ->, , (), =只能以成員函式的形式出現;
不對的例子:int operator + (int a,int b)
+號原來是對兩個數相加,現在企圖通過過載使它的作用改為兩個數相減,如果允許這樣過載的話,那麼表示式
4+3的結果是 7 還是 1, 所以不對,這是絕對禁止的。
(15)<< >> 過載:
輸入運算子的過載》
輸入兩個數,儲存到複數物件a中:
istream & operateor >>(istream &in, complex &a)
istream 表示輸入流,cin是istream類的物件;
輸出運算子的過載<<
ostream &operator<<(ostream &out, complex &a)
ostream:輸出流, cout是ostream的類的物件;
C 知識點複習
static static變數只能初始化一次 include include using namespace std void fun int i int main 輸出為 0 00因為static變數只初始化一次,static int value i這句話只執行一次,也就是fun 0 的時候執行。...
jdbc知識點複習(二)
事務使指一組最小邏輯操作單元,裡面有多個操作組成。組成事務的每一部分必須要同時提交成功,如果有乙個操作失敗,整個操作就回滾。原子性 atomicity 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。一致性 consistency 事務必須使資料庫從乙個一致性狀態變換到...
複習知識點
題目 class aclass bextends aclass cextends aclass dextends ba obj newd system.out.println obj instanceofb system.out.println obj instanceofc system.out....