C 知識點複習(二)

2021-08-02 23:57:04 字數 3705 閱讀 5414

昨天的複習讓自己有不小的收穫,對一些基礎知識也有了更加深刻的理解,所以今天在昨天的複習基礎上繼續往

後複習,鞏固:

(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....