例如以下類:
class
tabletennisplayer
void
resettable
(bool v)};
// 派生類
class
ratedplayer
:public tabletennisplayer
void resetrating (
unsigned
int r)};
tabletennisplayer::tabletennisplayer (
const string & fn,
const string & ln,
bool ht)
:firstname
(fn)
,lastname
(ln)
,hastable
(ht)
void tabletennisplayer::
name()
const
// ratedplayer類方法
ratedplayer::
ratedplayer
(unsigned
int r,
const string & fn,
const string & ln,
bool ht)
:tabletennisplayer
(fn, ln, ht)
ratedplayer::
ratedplayer
(unsigned
int r,
const tabletennisplayer & tp)
:tabletennisplayer
(tp)
,rating
(r)
派生類物件可以使用非私有的函式
ratedplayer rplayer
(1140
,"mallory"
,"duck"
,true);
rplayer1.
name()
;
這是可執行的.
基類指標和引用都可以指向派生類,但是通過指標和引用呼叫基類方法.
ratedplayer rplayer1
(1140
,"mallory"
,"duck"
,true);
tabletennisplayer & rt = rplayer;
tabletennisplayer * pt = rplayer;
rt.name()
;pt-
>
name()
;
但是不能通過派生類指標和引用指向基類,因為派生模擬基類多資料項和方法,如果能的話,派生類指標指向的物件,將會缺少物件,毫無意義.
比如:
ratedplayer olaf1
(1840
,"olaf"
,"loaf"
,true);
tabletennisplayer olaf2
(olaf1)
;
這是可執行的,這將會呼叫複製建構函式,而tabletennisplayer的複製建構函式的原型就是tabletennisplayer (const tabletennisplayer &),基類的引用引數可以接受派生類物件.
同理:
ratedplayer olaf1
(1840
,"olaf"
,"loaf"
,true);
tabletennisplayer winner;
winnner = olaf1;
winer已經是被建構函式初始化了,不會呼叫建構函式,將會呼叫隱式的賦值過載函式:
tabletennisplayer & operator=(const tabletennisplayer &)const,基類引用可以指向派生類物件.
派生類和基類的關係
c 乙個主要目標是提供 重用,類繼承是實現該目標的重要途徑之一。從乙個類派生出另乙個類時,原始類稱為基類,繼承類稱為派生類。派生類和基類的關係 1.派生類物件儲存了基類的資料成員 2.派生類物件可以使用基類的方法 如下例 class baseclass class derivclass public...
派生類和基類的關係
在c 中,我們允許 將派生類物件賦給基類物件。不允許將基類物件賦給派生類物件 只會將基類物件成員賦值,a1 b1 a是基類,b是派生類 用基類指標指向派生類物件。不允許用派生類指標指向基類物件 基類指標只能操作基類中的成員,pa b1 a是基類,b是派生類 基類引用作為派生類的別名。不允許派生類引用...
派生類和基類之間的關係
1 派生類物件可以使用基類的方法,條件是方法不是私有的 ratedplayer rplayer 1140,mallory duck true rplayer.name 2 基類指標可以在不進行顯示型別轉換的情況下指向派生類物件 3 基類引用可以在不進行顯式型別轉換的情況下引用派生類物件 ratedp...