有如下程序: #include 〈iostream〉 using namespace std; class Base { private: char c; public: Base(char n)

admin2010-03-29  17

问题 有如下程序:    #include 〈iostream〉    using namespace std;    class Base    {    private:       char c;    public:       Base(char n) :c(n) {}       ~Base ( )       {          cout〈〈c;       }    };    class Derived : public Base    {    private:       char c;    public:       Derived(char n) :Base(n+1),c(n) { }       ~Derived ()       {          cout〈〈c;       }    };    int main ( )    {       Derived obj (’x’);       return 0;    }    执行上面的程序将输出(    )。

选项 A、xy
B、yx
C、x
D、y

答案1

解析 在C++中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数结束时,派生类Derived对象。obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出x,然后调用基类的析构函数,输出y。
转载请注明原文地址:https://kaotiyun.com/show/Kxjp777K
0

随机试题
最新回复(0)