派生類和基類的關係

2021-10-06 11:03:38 字數 2006 閱讀 7361

例如以下類:

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...