• 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)
  • 相关阅读:
    版本控制系统Git
    CI框架中一个类中调用另一个类中已经加载对象测试
    关于PHP的框架
    node之http模块
    airtest之脚本批量运行
    airtest之一个脚本在多设备上运行
    npm概念
    node概念
    python -m xx.py和python xx.py的区别
    命令行运行脚本
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10232519.html
Copyright © 2020-2023  润新知