考虑以下几点:
class Abstract
{
public:
virtual void func() = 0;
};
int main() {
Abstract abs1; // doesn't compile
Abstract * abs2 = new Abstract(); // doesn't compile
Abstract * abs3; // compiles
return 0;
}
请注意,我没有实现 func()
,那么为什么可以执行 Abstract * abs3;
我们在哪里有一个纯虚方法和一个抽象类?
我知道如果我尝试执行 abs3->func(); 会出现运行时错误。 ,但我仍然不清楚为什么 C++ 允许该代码编译...?
谢谢,罗恩
最佳答案
abs3
是指向该类的指针。它可以安全地初始化为 Abstract 的任何具体子类或 NULL。编译器必须允许它,因为虽然您不能创建抽象类,但您必须能够创建指向它们的指针。看下面的例子
class Concrete: public Abstract
{
public:
virtual void func() { // do something };
};
int main ()
{
Abstract* abs3 = NULL;
abs3 = new Concrete;
}
关于c++ - 具有纯虚方法的抽象类 - 为什么可以执行 "Abstract * abs3;"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269166/