Inv*_*tus 0 c++ inheritance constructor
我现在知道在创建对象时调用构造函数.我也知道它不可能创建一个抽象类的对象.
但是,当我运行这段代码时,我看到以下内容: -
#include <iostream>
using namespace std;
class Pet {
public:
Pet(){cout<<"in base constructor\n";}
virtual ~Pet() = 0; //making pet abstract by making drstructor pure virtual
};
Pet::~Pet() {
cout << "~Pet()" << endl;
}
class Dog : public Pet {
public:
Dog(){cout<<"in drvd constructor\n";}
~Dog() {
cout << "~Dog()" << endl;
}
};
int main() {
Pet* p = new Dog; // Upcast
delete p; // Virtual destructor call
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译并运行时其输出为: -
in base constructor
in drvd constructor
~Dog()
~Pet()
Run Code Online (Sandbox Code Playgroud)
为什么Pet的构造函数被调用,即使它是一个抽象类而且不允许创建对象?所以它归结为最终只是在对象创建的情况下被调用的构造函数?
它不可能创建抽象类的对象
不要把这个ad-litteram.您无法创建实际类型为抽象的对象.
但是,如果您实现该类(扩展它并在其中实现所有纯虚方法)并实例化新类,则将创建原始抽象基类的对象作为新类的一部分.
继承是一种is-a关系.Dog是一个Pet.创建时Dog,创建一个Pet.但你不能自己创造一个Pet.