zoukankan      html  css  js  c++  java
  • C++对象构造时,构造函数运行时并不知道VT的存在

    class A {
    public:
    A() { init(); }
    virtual void init() { printf("A::init "); }
    };

    class B : public A {
    public:
    B() { init(); }
    virtual void init() { printf("B::init "); }
    };

    int main(int argc, char* argv[])
    {
    B b;
    return 0;
    }
    打印结果:
    A::init // 先执行父类A的构造函数,它严格执行自己的VT函数
    B::init // 然后执行B的构造函数,它执行自己的VT当然没问题。


    class A {
    public:
    A() { init(); }
    virtual void init() { printf("A::init"); }
    };

    class B : public A {
    public:
    virtual void init() { printf("B::init"); }
    };

    int main(int argc, char* argv[])
    {
    B b;
    return 0;
    }
    打印结果:
    A::init // 这里B类没有构造函数,因此只执行A类的构造函数,也就只执行A的VT函数,因为那时候A不知道B的存在(也许是B对象的内存还没有构建完毕)。

    就算换成指针A* a= new B() 也是一样。

  • 相关阅读:
    Linux常用命令2
    Linux常用命令1
    Nginx配置Kafka
    SpringBoot整合Druid
    spring boot jpa
    mybatis-plus_2
    copy data to map
    HashMap容量问题
    在SpringBoot主启动类中获取实例化的Bean
    Linux环境中Rsync增量备份文件
  • 原文地址:https://www.cnblogs.com/findumars/p/3371412.html
Copyright © 2011-2022 走看看