0

内部编译器如何识别类是抽象的(我们不能为其创建对象)?

4

4 回答 4

1

一个抽象类将包含至少一个纯虚函数。像这样的东西

virtual void foo() = 0;

任何从 this 派生且不覆盖 this 这样的函数的类也将是抽象的

于 2012-10-03T07:14:39.950 回答
0

编译器足够聪明,可以检查一个类或它派生的任何类中的纯虚函数。

如果类本身定义了纯虚函数[Ref 1],则无论它是否定义函数体,都将其标记为抽象类。

如果一个类继承自一个具有纯虚函数的类,那么它必须为纯虚函数提供一个定义。如果没有,它被标记为抽象。

[参考 1]

virtual void doSomething() = 0;
                          ^^^^^

PS:是的,纯虚函数可以有定义。

于 2012-10-03T07:14:21.327 回答
0

当然,通过检查定义并查看它是否在抽象类的定义中。不然怎么会这样?

于 2012-10-03T07:14:44.023 回答
0

如果类中至少有一个成员是抽象的,那么类就是抽象的。因此,如果类包含至少一个纯虚函数,则从编译器的角度来看,它是抽象的。

virtual void PureVirtualMethod() = 0;   // Any class that has methods
                                        // with such declaration is abstract.
于 2012-10-03T07:16:45.190 回答