c 前半部分總結

2021-08-02 21:16:17 字數 3821 閱讀 1435

建構函式:與類同名的特殊成員函式,主要用來初始化物件的資料成員。定義形式如下:

class x

特點沒有返回值,可以過載,由系統自動呼叫,不允許在程式中顯示呼叫。

例:#include

using

namespace

std;

classx

}; void

main()

析構函式:與類同名的另一類特殊成員函式,作用有建構函式相反,用於在物件生存期結束時,完成物件的清理工作。如用delete刪除物件分配的自由空間。定義形式:

class x

特點:加「~」,沒有返回型別,沒有參數列,不能過載,乙個類只能有乙個析構函式,由系統自動呼叫,不能在程式中顯示呼叫析構函式。

例:#include

using

namespace

std;

classx

~x()

};void

main()

向函式傳遞物件,傳值、傳引用、傳指標

#include

using

namespace

std;

classx

intgetm()

void

setm(

inti)

}; void

display(xob

) void

change1(xob

)//傳值

void

change2(x&

ob)//傳引用

void

change3(x*

ob)//傳指標

void

main()

protected

和繼承

protected可以用來設定類成員的訪問許可權,成為保護成員。主要用於繼承,對於乙個不被任何派生類繼承的類而言,protected訪問屬性與private完全相同。而在繼承結構中,基類的protected成員雖然不能被派生類外部函式訪問,卻能被其派生類直接訪問。

#include

using

namespace

std;

classb;

classd:

publicb

}; void

main()

繼承方式

c++繼承的形式

class 

派生類名:[繼承方式] 基類名

繼承方式可以是public,protected,private,如果省略繼承方式,c++預設是private。派生類成員的定義與普通類定義方式相同,但它們可以訪問基類的public和protected成員。

公有繼承:繼承方式為public,基類成員的訪問許可權在派生類中保持不變。

私有繼承:繼承方式為private,基類private仍是private,但基類public和protected變為private。

保護繼承:繼承方式protected,基類public變為protected,基類protected仍是protected,基類private仍是private。

例:#include

using

namespace

std;

class

base

intgetx()

void

showx()

};class

derived

:public

base

void

sety()

void

showy()

};void

main()

成員函式的重定義和名字隱藏

派生類不僅可以新增基類沒有的成員,也可以對基類的成員函式進行重定義和過載。

#include

using

namespace

std;

class

base

void

set(

intn)

void

print()

};class

derived

:public

base

//過載基類的成員函式set()

void

set(

inti

, intj, 

intk)

void

print()

};void

main()

派生類的建構函式除了要負責本類成員的額初始化外,還要呼叫基類和物件成員的建構函式,並向它們傳遞引數,以完成基類子物件和物件成員的建立和初始化。

例:#include

using

namespace

std;

class

base

~base()

};class

derived

:public

base

~derived()

baseb;

}; void

main()

關於虛函式virtual,基類a,由a派生出b,再由b派生出c。如果不用虛函式,型別為派生類的指標不能訪問基類的內容,型別為基類的指標在指向派生類時,不會訪問派生類,只會訪問到基類的內容;當使用虛函式virtual後,型別為派生類的指標照樣不能訪問基類,而型別為基類的指標在指向派生類時,不會再去訪問基類的內容,而是去訪問該派生類的內容。

#include

#include

using

namespace

std;

classa

}; classb:

publica

}; classc:

publicb

}; void

main()

派生類中的虛函式要保持其虛特性,必須與基類虛函式的函式原型完全相同,所帶的引數個數,引數型別都必須相同,否則就不是虛函式,而是函式過載。

虛析構函式,建構函式和析構函式與所在類的名字相同,按理不符合虛函式,但是存在虛析構函式(不存在虛建構函式)。可以通過基類型別的指標訪問派生類的析構函式,使析構徹底。

#include

using

namespace

std;

classa

}; classb:

publica

~b()

};void

main()

純虛函式和抽象類

有時候定義乙個類不是為了建立物件,而是把它作為派生其他類的基類,通過此基類訪問派生類物件。純虛函式的形式:

class x

純虛函式在基類中宣告,但它基類中沒有具體的函式實現**,要求繼承它的派生類為純虛函式提供實現**,該基類不能建立物件,稱為抽象類。c++對抽象類的限定:

1.抽象類中有虛函式,沒有實現**,不能建立物件。

2.抽象類只能作為其他類的基類,可以通過指標和引用訪問它的派生類物件。

3.如果乙個派生類只是繼承了抽象類的純虛函式,而沒有重新定義基類的純虛函式,則派生類也是乙個抽象類。

#include

using

namespace

std;

class

figure

virtual

void

area() = 0;

};class

********

:public

figure

};class

rectangle

:public

figure

};void

main()

Head First C (前半部分)讀書筆記

記錄一些之前沒有注意到的小細節。char ex 20 scanf 19s ex scanf 用於吸收結構化字串,19s可以防止陣列越界,不吸收回車。fgets ex,sizeof ex stdin fgets 用於吸收非結構化字串,sizeof ex 是吸收的字串的總長度,包括 0 這裡為20,吸收...

奇數字於偶數的前半部分

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。兩個思路吧,第乙個思路 類似冒泡演算法,前偶後奇數就交換 class solution 第二個思路 再建立乙個陣列 class so...

一年級第一學期,前半部分總結

自己之前一直沒有做過乙個系統的總結,現在做乙個總結,耗時大約30分鐘,用於對一年級第一學期的前半部分做個總結。我發現我比較適合這樣的作息,就是下午4點 5點去健身房活動一下。可是嘗試 好,言歸正傳,坐下總結。自己到目前為止,發現了很多不足。主要有以下幾點 不足 1.作業敷衍了事,學不深入,和csh ...