派生類和基類之間的關係

2021-08-01 03:31:32 字數 2710 閱讀 5326

1、派生類物件可以使用基類的方法,條件是方法不是私有的

ratedplayer rplayer(1140,"mallory","duck",true);

rplayer.name();

2、基類指標可以在不進行顯示型別轉換的情況下指向派生類物件

3、基類引用可以在不進行顯式型別轉換的情況下引用派生類物件

ratedplayer rplayer1(1140,"mallory","duck",true);

tabletennisplayer &rt=rplayer;

tabletennisplayer *pt=&rplayer;

rt.name();//引用

pr->name();//指標

然而基類指標或引用智慧型用於呼叫基類方法,因此不能使用rt或pt來呼叫派生類的resetranking方法。

通常情況下,c++ 要求引用和指標型別與賦給的型別匹配,但這一規則對繼承來說是例外。不可以將基類物件和位址賦給派生類的引用和指標。

4、對於形參為指向基類的指標的函式,也存在相似的關係(可以指向基類物件或派生類物件)。它可以使用基類物件的位址或派生類物件的位址作為實參。

void wohs(const tabletennisplayer*pt);

...tabletennisplayer player1("tara","boomdea",false);

ratedplayer rplayer(1140,"mallorty","duck",true);

wohs(&player1);

wohs(&rplayer1);

5、將基類物件初始化為派生類物件

假設有這樣的**:

ratedplayer olaf1(1840,"olaf","loaf",true);

tabletennisplayer olaf2(olaf1);

要將基類物件olaf2初始化為派生類物件olaf1,匹配的建構函式原型:

tabletennisplayer(const ratedplayer&)//但是這樣的原型是不存在的
雖然類定義中不存在這樣的建構函式,但存在隱式複製建構函式:

tabletennisplayer(const tabletennisplayer &);//形參是基類引用
因為形參是基類引用,所以可以引用派生類這樣將基類物件olaf1初始化為派生類物件olaf2時,將使用這個隱式的複製建構函式,它可以複製firstname,lastname,hastable成員。

6、可以將派生來物件賦值給基類物件

ratedplayer olaf1(1840,"olaf","loaf",true);

tabletennisplayer winner;

winner =olaf1;

在這種情況下,程式將使用隱式過載賦值運算子:

tabletennisplayer& operateor=(const tabletennisplayer &)const;
形參是基類的引用,因此可以引用派生類物件。因此olaf1的基類部分被複製給winner。

tabnn0.h標頭檔案類的宣告

#ifndef tabtenn1_h_

#define tabtenn1_h_

#include

using

std::string;

class tabletennisplayer;

void tesettable(bool v);

};class ratedplayer :public tabletennisplayer//派生類

void resetrating(unsigned

int r)

};#endif

tabtnn1.cpp類的實現

#include

#include"tabtenn1.h"

//用初始化列表直接使用string的賦值建構函式將firstname初始化為fn

tabletennisplayer::tabletennisplayer(const

string &fn, const

string &ln, bool ht) :firstname(fn), lastname(ln), hastable(ht){}

void tabletennisplayer::name()const

//ratedplayer methods

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)

{}

usett1.cpp主程式

#include

#include"tabtenn1.h"

int main()

派生類和基類的關係

c 乙個主要目標是提供 重用,類繼承是實現該目標的重要途徑之一。從乙個類派生出另乙個類時,原始類稱為基類,繼承類稱為派生類。派生類和基類的關係 1.派生類物件儲存了基類的資料成員 2.派生類物件可以使用基類的方法 如下例 class baseclass class derivclass public...

派生類和基類的關係

例如以下類 class tabletennisplayer void resettable bool v 派生類 class ratedplayer public tabletennisplayer void resetrating unsigned int r tabletennisplayer ...

派生類和基類的關係

在c 中,我們允許 將派生類物件賦給基類物件。不允許將基類物件賦給派生類物件 只會將基類物件成員賦值,a1 b1 a是基類,b是派生類 用基類指標指向派生類物件。不允許用派生類指標指向基類物件 基類指標只能操作基類中的成員,pa b1 a是基類,b是派生類 基類引用作為派生類的別名。不允許派生類引用...