在C ++中解释编译器如何识别类是抽象的?

时间:2012-10-03 07:10:44

标签: c++ abstract

内部编译器如何识别wheather类是一个抽象(我们无法创建对象)?

4 个答案:

答案 0 :(得分:1)

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

virtual void foo() = 0;

任何派生自此并且不覆盖此类函数的类也将是抽象的

答案 1 :(得分:0)

编译器非常智能,可以检查类或其派生的任何类中的纯虚函数。

如果类本身定义了一个纯虚函数 [Ref 1] ,则它被标记为Abstract类,而不管它是否定义了函数体。

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

[参考1]

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

P.S:是纯虚函数可以有定义。

答案 2 :(得分:0)

通过检查定义并查看它是否在抽象类的定义中,当然。怎么会发生这种情况?

答案 3 :(得分:0)

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

virtual void PureVirtualMethod() = 0;   // Any class that has methods
                                        // with such declaration is abstract.