【問題描述】定義一個基類BaseClass,從它派生出類DerivedClass,BaseClass有成員函數fn1()、fn2(),DerivedClass也有成員函數fn1()、fn2(),在主程式中定義一個DerivedClass的對象,分别用DerivedClass的對象以及BaseClass和DerivedClass的指針來調用fn1()、fn2(),觀察運作結果。
主函數如下,請勿修改:
int main()
{
DerivedClass D;
DerivedClass *pD=&D
BaseClass *pB=&D;
D.fn1();
D.fn2();
pD->fn1();
pD->fn2();
pB->fn1();
pB->fn2();
return 0;
}
【樣例輸出】
Call Derive fn1()
Call Derive fn2()
Call Derive fn1()
Call Derive fn2()
Call Base fn1()
Call Base fn2()
完成此題是如此的簡單,幾行代碼就可搞定,但是對主函數的輸出,需要你仔細的分析并掌握哦!如果反過來,給你代碼,請分析并寫出程式運作結果,是否ok?
#include<iostream>
using namespace std;
class BaseClass
{
public:
void fn1() {cout<<"Call Base fn1()"<<endl;}
void fn2() {cout<<"Call Base fn2()"<<endl;}
};
class DerivedClass:public BaseClass
{
public:
void fn1() {cout<<"Call Derive fn1()"<<endl;}
void fn2() {cout<<"Call Derive fn2()"<<endl;}
};
int main()
{
DerivedClass D;
DerivedClass *pD=&D;
BaseClass *pB=&D;
D.fn1();
D.fn2();
pD->fn1();
pD->fn2();
pB->fn1();
pB->fn2();
return 0;
}
類型相容規則是指在需要基類對象的任何地方,都可以使用共有派生類的對象來替代。
相容規則中所指的替代包括以下情況:
1.派生類的對象可以隐含轉換為基類對象
2.派生類的對象可以初始化基類對象的引用
3.派生類的指針可以隐含轉換為基類的指針