問題及代碼:
/*copyright 計算機與控制工程學院
文件名稱:閱讀程序
完成日期:2016/5/24
作者:馬豔豔
*/
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Who() =0;
};
class FirstDerived:public Base
{
public:
void Who() { cout<<"F"; }
};
class SecondDerived:public Base
{
public:
void Who() { cout<<"S"; }
};
int main()
{
FirstDerived first_obj;
SecondDerived second_obj;
Base &bref=first_obj;
bref.Who();
bref=second_obj;
bref.Who();
Base *bp;
bp=&first_obj;
bp->Who();
bp=&second_obj;
bp->Who();
return 0;
}
運行結果:
結果分析:
/*程序中Base、FirstDerived和SecondDerived屬於同一個類族,抽象類Base通過純虛函數
爲整個類族提供了通用的外部接口定義。Base &bref=first_obj;基類的引用可以作爲派生類
. 對象的別名,符合類型兼容規則。所以bref.Who();輸出“F”,bref=second_obj;bref已經被
引用賦值,其值不能被更改,故bref.Who();仍然輸出“F”。bp爲指向基類的指針,可以指向
派生類,所以分別輸出“F”和“S”。
*/