繼承後子類的成員函式會覆蓋基類的成員函式(過載函式也會被覆蓋)
被隱藏的基類函式是可以被呼叫的,如:
fido.mammal::move(2);
//dog 類的fido資料成員呼叫了其基類mammal的move函式
//注意使用域作用符
子型別關係: 子類是基類的子型別
虛函式(虛方法) → 多型 關鍵字virtual
多型的理解: 飛機、鳥、風箏等都會飛但是飛的方法不一樣;狗、貓、馬等都會叫但叫聲不同
虛函式表和動態繫結 必須呼叫指標或者引用的方式
// 38 繼承和虛函式
#include
using namespace std;
enum breed
;class mammal //基類
virtual ~
mammal()
virtual void
speak()
void
sleep()
void
move()
const
void
move
(int distance)
const
virtual mammal*
clone()
//利用虛複製建構函式
protected:
int itsage;
int itsweight;};
class dog : public mammal
virtual ~
dog(
)void
wagtail()
const
void
begforfood()
const
virtual void
speak()
//覆蓋了基類mammal的speak函式
void
move()
const
//覆蓋了move(),且所有相關的過載函式也被隱藏了
virtual mammal*
clone()
//利用虛複製建構函式
private:
breed itsbreed;};
class cat : public mammal
public:
virtual void
speak()
};class horse : public mammal
virtual mammal*
clone()
//利用虛複製建構函式};
class pig : public mammal
virtual mammal*
clone()
//利用虛複製建構函式};
class base};
class derived : public base};
void
fun(
const base& cb)
void
valuefunction
(mammal mammalvalue)
//普通變數按值傳遞(不能實現多型)
void
ptrfunction
(mammal *pmammal)
//傳指標
void
reffunction
(mammal &rmammal)
//傳引用
intmain()
for(
int i =
0; i <5;
++i)
for(
int i =
0; i <5;
++i)
for(
int i =
0; i <5;
++i)
for(
int i =
0; i <5;
++i)
for(
int i =
0; i <5;
++i)
return0;
}
虛繼承和虛函式繼承
虛繼承主要用於菱形 形式的繼承形式 虛繼承是為了在多繼承的時候避免引發歧義,比如類 有個就是a,繼承了 c也繼承了 當 多繼承 時,就會有歧義產生了,所以要使用虛擬繼承避免重複拷貝。虛函式繼承是解決多型性的,當用基類指標指向派生類物件的時候,基類指標呼叫虛函式的時候會自動呼叫派生類的虛函式,這就是多...
繼承和虛函式
摘要 本文從5段 例項出發,通過類中類的普通繼承,類的虛繼承,類的多重繼承,多個虛函式類的普通繼承 虛繼承與多重繼承,幾個交叉概念,詳細的闡釋了繼承 虛函式與虛繼承的基本概念,深入剖析了繼承於虛繼承的區別於聯絡。exp.001 虛繼承 cpp view plain copy include clas...
關於虛函式和虛繼承
基類中無虛函式,派生類中有虛函式,基類的指標指向派生類物件 指向的是派生類中基類的起始部分 delete 時只析構基類的物件而不析構派生類的物件。基類指標指向派生類的的情況下,基類的虛構要設為虛析構。虛表合併時向內層合併,虛表合併時會先拷貝乙份副本,然後合併的時候使用副本合併。虛函式表的生成在編譯器...