有如下程序:#include <iostream>using namespace std;class Base{private: char c;public: Base(char n) :c(n){} ~Base()

admin2010-12-16  28

问题 有如下程序:#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

答案A

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

最新回复(0)