建構函式:與類同名的特殊成員函式,主要用來初始化物件的資料成員。定義形式如下:
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 ...