2011-01-12 44 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)定義了所有的人。只有一個類可以成爲具體/非抽象的!

相關問題