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)
  • 相关阅读:
    删除 AP 发票相关脚本
    js框架简明
    16 款最流行的 JavaScript 框架
    八款你不得不知的开源前端JS框架
    ExtJS面向对象
    js6类和对象
    js模拟类
    js实现继承
    Html中各种空格的显示
    常用快速原型设计工具大比拼、原型设计工具哪个好用
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10232519.html
Copyright © 2011-2022 走看看