有如下程序: #include<iostream> using namespace std; class XX { protected: int k; public: XX(int n=5):k(n){};

admin2012-01-20  17

问题 有如下程序:    #include<iostream>    using namespace std;    class XX    {    protected:    int k;    public:    XX(int n=5):k(n){};    ~XX()    {    cout<<"XX":    }    virtual void f()const=0;    };    inline void XX::f()const    {    cout<<k+3;    };    class YY:public XX    {    public:    ~YY()    {    cout<<”YY”;    }    void f()const    {    cout<<k-3; XX::f();    }    };    int main()    {    XX &p=*new YY;    P.f();    delete &p;    return 0:    }    执行上面的程序将输出(    )。

选项 A、28XX
B、28YYXX  
C、33XX
D、33XXYY

答案A

解析 类YY公有派生于类XX,派生类对象可以替代基类对象向基类埘象的引用进行赋值初始化,XX&p=*new YY语句定义了XX对象p引用,并用YY对象初始化,p并不是YY对象的别名,是XX基类对象的别名,故先调用基类XX的构造函数将k初始化为5,p.f()首先输出k-3即2,然后调用XX::f()输出k+3,即8,delete &p删除p,调用XX的析构函数输出“XX”。
转载请注明原文地址:https://jikaoti.com/ti/dDL0FFFM
0

最新回复(0)