2011-01-12 47 views

回答

3

我不知道我理解正确你的问题,但你必须执行已宣告但尚未在抽象基类实现的所有方法,否则自然类被认为是抽象的为好。

+0

正确的,但您的术语稍微偏离:你必须非纯粹落实基本所有的纯方法。有可能实施一种纯粹的方法;这是纯粹的dtors的实现中最常见的。 – 2011-01-12 19:55:42

2

如果您的类声明了任何“纯虚拟”方法(即“= 0”),或者继承了任何纯虚方法而不覆盖它们,那么您的类将是抽象的。

2
class A 
{ 
public: 
    virtual void fun() = 0; //"pure" virtual function 
    virtual void gun() = 0; //"pure" virtual function 

    virtual void sun() //virtual function - "not pure" 
    { 
     /***** implementation code *****/ 
    } 
}; 

这里A是一个抽象类,因为它有两个纯虚函数。

class B : public A 
{ 
public: 
    virtual void fun() 
    { 
     /******* implementation code ********/ 
    } 
}; 

问题:什么是B?它是不是抽象的?毕竟,它定义/实施一个虚函数调用fun()

答案:B号太是一个抽象类,因为它没有定义/实施gun()这太是在基类A虚函数。定义一个称为fun()的虚函数不会使其非抽象。它必须定义所有的纯粹的虚拟功能。 ALL意味着ALL,尽可能多的有纯粹的虚拟功能。这里

所以两个重要的注意事项:1)纯虚函数,2)定义了所有的人。只有一个类可以成为具体/非抽象的!

相关问题