2014-03-03 102 views
0

假設我有一個基類水果和三個派生類說Apple,orange和mango.Now我想只在Apple類中定義一個成員函數「taste」。所以我該怎麼做? 是否有必要在基類中定義它,所有的派生類或者我可以只在一個所需類即蘋果定義它 我必須使用虛擬函數,該函數在派生類中定義函數

感謝和問候

回答

0

你不不必在基類中定義它。但是,您將無法在基類指針或引用上調用此方法。該功能不需要是虛擬的。

class Fruit {}; 
class Apple : public Fruit 
{ 
public: 
    void Taste(); 
} 

class Orange : public Fruit {} 
class Mango : public Fruit {} 

Fruit* f = new Apple(); 
f->Taste(); // Error 
Apple* a = new Apple(); 
a->Taste() // Ok 

然而,如果你想擁有從基類指針或引用訪問方法,你需要定義一個空的實現在基類的虛方法和蘋果類中重寫它。

class Fruit 
{ 
public: 
    virtual void Taste() {} 
}; 
class Apple : public Fruit 
{ 
public: 
    virtual void Taste() 
    { 
     // Do something. 
    } 
} 

class Orange : public Fruit {} 
class Mango : public Fruit {} 

Fruit* f = new Apple(); 
f->Taste(); // Ok 
Fruit* f2 = new Orange(); 
f2->Taste(); // Ok and no side effect. 
+0

那麼如何從衍生class.Actually調用這個方法我想呼籲基類指針,但在這個方法同時我不想將它包含在每個派生類中,由於代碼非常大,所以代碼爲 – user3374548

+0

Apple a;一種味道();如果您將其定義爲空白,則不必在每個繼承的類中重新定義它,除非要像Apple那樣更改默認實現。看看我的第二個例子 –

+0

水果應該是純粹的虛擬,這種感覺更好。 'virtual void Taste()= 0;' –

相關問題