c ++抽象类构造函数调用

时间:2018-04-08 06:15:45

标签: c++ abstract-class

任何人都可以在下面的代码中向我解释构造函数调用。 当没有对象但是只有指向派生类的指针时,如何调用抽象类的构造函数。是否创建了一个实例来保存vtable?

#include <iostream> 

using namespace std;

class pure_virtual {
  public:
    pure_virtual() {
      cout << "Virtul class constructor called !"  << endl;
    }
    virtual void show()=0;
};

class inherit: public pure_virtual {
  public:
    inherit() {
      cout << "Derived class constructor called !" << endl;
    }
    void show() {
      cout <<"stub";
    }
};

main() {
  pure_virtual *ptr;
  inherit temp;
  ptr = &temp;
  ptr->show();
}

1 个答案:

答案 0 :(得分:2)

调用pure_virtual的构造函数时,将调用inherit类的构造函数。因此,当执行行inherit temp;时,正在调用对象的构造函数,因为它是派生类。然后首先调用基类构造函数。

所以在你的情况下,输出将是

Virtul class constructor called !
Derived class constructor called !

因为void show()是虚拟的,所以调用了正确的函数,即inherit类的函数。