zoukankan      html  css  js  c++  java
  • 6w5:第六周程序填空题2

    描述

    下面程序的输出结果是:

    destructor B

    destructor A

    请完整写出 class A。 限制条件:不得为 class A 编写构造函数。

    #include <iostream>
    using namespace std;
    class A {
    // 在此处补充你的代码
    };
    class B:public A {
        public:
            ~B() { cout << "destructor B" << endl; }
    };
    int main() {
        A * pa;
        pa = new B;
        delete pa;
        return 0;
    }

    输入无输出destructor B
    destructor A样例输入

    样例输出

    destructor B
    destructor A

    Code:

    #include <iostream>
    using namespace std;
    class A {
    // 在此处补充你的代码
        public:
            virtual ~A() { cout << "destructor A" << endl; }
    };
    class B:public A {
        public:
            ~B() { cout << "destructor B" << endl; }
    };
    int main() {
        A * pa;
        pa = new B;
        delete pa;
        return 0;
    }
    

      

    Analysis:

    刚开始想的是加一A的析构函数,但是运行的时候只能够执行A的析构函数,不能执行B的析构函数。但是当把A的析构函数变成虚的析构函数时,就能够正确输出了。根据多态的机制来分析:

    pa是指向基类A对象的指针,当pa指向基类A的派生类B时,此时就满足了多态的条件。析构时先执行B的析构函数在执行A的析构函数。

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    老鸟的Python新手教程
    vs2010经常使用快捷键
    SQL基础--&gt; 约束(CONSTRAINT)
    哈哈,做题了
    【网络协议】TCP中的四大定时器
    JAVA反射机制
    JUnit入门
    怎样将程序猿写出来的程序打包成安装包(最简单的)
    事件传递机制总结
    理解class.forName()
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10232519.html
Copyright © 2011-2022 走看看