zoukankan      html  css  js  c++  java
  • 虚函数有关面试题

    class A{
        public:
            A(){p();}
            virtual void p(){print("A")}
            virtual ~A(){p();}
    };
    class B:public A{
        public:
            B(){p();}
            void p(){print("B")}
            ~B(){p();}
    };
    int main(int, char**){
            A* a=new B();
            delete a;
    }

    这段程序的输出:ABBA

    题目想构造一个B类的对象,B继承自A,所示首先构造A,A中构造函数调用P,虽然P是虚函数,按理来说应该动态绑定,但是此时B并没有被构造,所以只能调用自己的P函数(输出A),接下来构造B,调用B的P函数(输出B),接着析构从派生类到基类,首先析构B,调用B的P函数(输出B),接着调用A的析构函数,按理来说应该动态绑定,但是此时B已经被析构,所以只能调用自己的P函数(输出A)。
     
    解释就是上面的,但是C++不推荐在构造/析构函数中调用虚函数进行动态绑定,详情请看Effective C++。
  • 相关阅读:
    oracle 更改账户名密码
    mongodb 分片副本集搭建
    爬虫目录
    centos MySQL安装与卸载
    ANACONDA 安装
    chrome 安装
    linux pycharm 安装 idea
    linux 基本命令
    高数18讲 之极限与连续
    高数18讲 之基础知识
  • 原文地址:https://www.cnblogs.com/FlyGee/p/7423528.html
Copyright © 2011-2022 走看看