單繼承:
class 《派生類名》:《繼承方式》《基類名》;
基類成員在派生類中的訪問屬性
公有繼承:
派生的物件只能基類的public;
派生類的成員函式可以訪問基類的public和protected。
私有繼承:
派生類的內部成員函式可以訪問基類的public、protected
保護繼承:
派生類的成員函式和友元可以訪問public、protected
繼承時導致的二義性
2.1 類間的轉換
a在公有繼承方式時,派生類可以給基類賦值(隱式轉換),基類不能給派生類賦值。
b 基類物件可以強制轉換為派生類物件指標/引用
c 乙個指向基類的指標可以用來指向該基類公用派生類的任何物件(多型性的關鍵)。
2.2 多基繼承
2.3 菱形繼承
轉換建構函式
型別轉換函式
注意:a)轉換函式必須時成員函式,不能是友元函式
b)轉換函式不能指定返回函式,但在函式體內必須用return語句以傳值方式返回乙個目標型別的變數
c)轉換函式不能有引數
非c++內建別a和b,在一下幾種情況b能隱式轉化為a:
a)b公有繼承自a,可以間接繼承。
classb:
public a
;
b)b中型別轉換函式
classb;
a a;
b b;
a=b;
//合法
c)a實現了非explicit的引數為b(可以有其他帶預設值的引數)的建構函式
classa;
a a;
b b;
a=b;
//合法
多型:靜態多型性(函式過載、運算子多載)
動態多型性(虛函式)
靜態聯編與動態聯編
c++中的函式呼叫預設不使用動態繫結。要觸發動態繫結,需要滿足兩個條件:
a)只有指定為虛函式的成員函式才能進行動態繫結,成員函式預設為非虛函式,非虛函式不進行動態繫結
b)必須通過基類型別的引用或指標進行函式呼叫
虛函式表指標(vptr)及虛基類表指標(bptr)
c++在布局以及訪問時間上主要的額外負擔是由virtual引起的。
2.1 虛函式表指標
2.2 含靜態變數、虛函式的類的空間計算
2.3 虛函式表的實現
2.4虛基類表指標(bptr)
虛擬繼承時建構函式的書寫
純虛函式
class
《類名》
**凡是含有純虛函式的類都稱為抽象類,不可以宣告物件。**除非派生類中完全實現基類所有的純虛函式,否則派生類也是抽象類。只定義了protected型建構函式的類也是抽象類。
typeid
通過執行時型別識別(rtti),程式能夠使用基類的指標或引用來檢索這些指標或引用所指物件的實際型別。
下面兩個操作符提高rtti:
a)typeid 操作符,返回指標或引用所指物件的實際型別
b)dynamic_cast 操作符,將基類型別的指標或引用安全的轉換為派生類的指標或引用
顯示轉換
static_cast dynamic_cast const_cast reinterpret_cast
reinterpret_cast
int
*ip;
char
*pc=
reinterpret_cast
<
char
*>
(ip)
;
const_cast 只有使用const_cast才能將const性質去掉
const
char
*ip;
char
*pc=
const_cast
<
char
*>
(ip)
;
static_cast 隱式轉換
double d=
90.0;
int i=d;
//等價於 int i=static_castd;
類層次間下行轉換(把基類指標或引用轉換成子類指標或引用)、指標不可以用隱式轉換。
dynamic_cast
該運算子把expression轉換成type型別的物件。type必須是類的指標、類的引用或者是void*。dynamic_cast 涉及執行時型別檢查
2019物件導向程式設計 作業5
題目 基於鍊錶的學生資訊管理系統 要求 1 插入節點 輸入學生資訊後,生成節點並插入鍊錶中 2 刪除節點 根據給定的學生姓名或學號刪除該學生節點 3 查詢節點 根據給定的學生姓名或學號查詢學生資訊,並顯示出來 4 查詢並顯示總成績最高和最低的學生資訊 5 統計鍊錶中的學生人數 6 時間允許時選做 對...
物件導向5
以下不是包裝類 包裝類 nsvalue 是 nsnumber的父類,nsvalue 代表乙個更通用的包裝類,nsnumber是更具體的包裝類,nsnumber主要包括以下三個方法 nsnumber num nsnumber numberwithint 20 nslog d num intvalue ...
物件導向5
object equals tostring object 是所有物件的直接後者間接父類,傳說中的上帝。該類中定義的肯定是所有物件都具備的功能。object類中已經提供了對物件是否相同的比較方法。如果自定義類中也有比較相同的功能,沒有必要重新定義。只要沿襲父類中的功能,建立自己特有比較內容即可。這就...