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是派生類 基類引用作為派生類的別名。不允許派生類引用...