c++ - 具有纯虚方法的抽象类 - 为什么可以执行 "Abstract * abs3;"?

标签 c++ abstract-class pure-virtual

考虑以下几点:

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/

相关文章:

java - 使用接口(interface)和抽象类

java - GNU Smalltalk - 继承和多参数方法/构造函数

c++ - 用纯虚方法覆盖(常规)虚方法有什么影响?

C++多重继承方法重载

c++ - 非 C++ OOP 语言中的 header

c++ - Microsoft 等效于 WebkitGTK 悬停链接信号

Java-JPA : How can I create a table for each subclass but not for superclass?

c++ - 在什么情况下给出一个纯虚函数的实现是有利的?

C++链表中的访问冲突读取位置

c++ - OpenCV 随机森林 CvRTrees 错误