有如下程序: #include #include using namespace std; class Instrument{ public: Instrument(string t,string n):ty

admin2020-06-29  32

问题 有如下程序:
    #include
    #include
    using namespace std;
    class Instrument{
    public:
    Instrument(string t,string n):type(t),name(n){}
    virtual string GetType()const{return type;}
    virtual string GetName()const{return name;}
    protected:
    string type,name;
    };
    class Piano:public Instrument{
    public:
    Piano(string n=’’AB’’,string t=’’CD’’):Instrument(n,t){}
    string GetType()const{return’’WX’’;}
    string GetName()const{return’’YZ’’;}
    };
    int main(){
    Instrument*pi=new Piano();
    cout<GetType()<<’-’<GetName()<    delete pi;
    return 0;
    }
    运行时的输出结果是(    )。

选项 A、WX-AB
B、YZ-WX
C、WX-CD
D、WX-YZ

答案D

解析 基类指针pi指向的是派生类Pi-ano的对象,另外GetType与GetName都是虚函数,所以语句pi->GetType()与pi->GetName()满足动态联编的条件,运行时会调用pi所指向对象的成员函数,所以pi->GetType()调用派生类Piano的成员函数,输出WX,pi->GetName()调用派生类Piano的成员函数,输出YZ,答案为D选项。
转载请注明原文地址:https://kaotiyun.com/show/xi8p777K
0

最新回复(0)