天天看點

類型相容規則

【問題描述】定義一個基類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.派生類的指針可以隐含轉換為基類的指針

繼續閱讀