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

admin2021-06-10  22

问题 有如下程序:
   #include
    using namespace std;
    class XX
    {
    protected:
    int k:
    public:
    xx(int n=5):k(n){}:
    ~XX()
    {
    Cout<<“XX”;
    }
    virtual void foconst=0;
    };
    inline void XX::foconst
    {
    cout<    };
    class YY:public XX
    {
    public:
  ~YY()
    {
    cout<<”YY”:
    }
    void foconst
    {
    cout<    }
    };
    int main()
    {
    XX&p=*new YY;
    p.f0;
    delete&p;
    retum 0:
    }
执行上面的程序将输出(    )。

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

答案A

解析 类YY公有派生于类XX,派生类对象可以替代基类对象向基类对象的引用进行赋值初始化,XX&p=*newYY语句定义了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://kaotiyun.com/show/xSfp777K
0

最新回复(0)