2011-04-09 44 views
2

我:OO:如何創建一個功能「addFruit」添加水果入載體<fruit>

class fruit 
{ 
} 

class apple:fruit 
{ 
} 

class pear:fruit 
{ 
} 

我想創建一個函數「addFruit」添加水果放入水果的向量。 喜歡:

vector<fruit> fruits; 

我該怎麼辦呢?

編輯: 我試過把一個虛函數放在基類中。並在子類中進行真正的操作。但它失敗了。我有很多錯誤。所以我只需要一個清晰的想法和示例代碼片段。

+3

學習一些C++基礎知識可能會有所幫助:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – 2011-04-09 02:13:32

+2

「我試過」,「它失敗了」和「我得到了很多錯誤「是沒有信息的。向我們展示「我試過」代碼中的內容,並告訴我們「失敗」以及「很多錯誤」是什麼,我們可以幫助解決它。否則,這不是一個真正的問題。 (如果你沒有100多個問題,我認爲你正在尋找作業幫助 - 也許你是?) – 2011-04-09 02:35:39

+0

不要在你的'fruit'基類中放置一個函數「addFruit()」。每個水果可以具有(例如)顏色,平均重量等等,但是不應該有一種方法「將我添加到某種水果矢量中」。在'fruit'類之外創建這樣的方法(並且在每個派生類之外) – 2017-08-28 13:32:03

回答

5

要正確使用繼承你會想要做這樣的事情:

#include <iostream> 
#include <vector> 

class Fruit 
{ 
public: 
    virtual void Eat() 
    { 
     std::cout << "Mmm.. a fruit!" << std::endl; 
    } 
    virtual ~Fruit() {} 
}; 

class Apple : public Fruit 
{ 
public: 
    void Eat() 
    { 
     std::cout << "Mmm.. an apple!" << std::endl; 
    } 
}; 

class Pear : public Fruit 
{ 
public: 
    void Eat() 
    { 
     std::cout << "Mmm.. a pear!" << std::endl; 
    } 
}; 

int main() 
{ 
    std::vector<Fruit *> fruits; 
    fruits.push_back(new Pear()); 
    fruits.push_back(new Apple()); 
    fruits.push_back(new Fruit()); 

    for (int i = 0; i < fruits.size(); i++) 
     fruits[i]->Eat(); 

    return 0; 
} 

你需要,以便採取動態調度的優勢,使用指針的基類(水果*)。否則,它只會調用Fruit的Eat()方法。

我的答案中的示例允許從Fruit派生的類覆蓋Eat()(如果他們想要的話),但這不是必需的。如果您將虛函數設爲純函數,那麼派生類必須實現它。

class Fruit 
{ 
public: 
    // Cannot instantiate this class, and derived classes must provide this 
    virtual void Eat() = 0; 
}; 

都會響起Donotalo的評論,你想要的功能可以實現爲:

class FruitCollection 
{ 
private: 
    std::vector<Fruit *> fruits; 

public: 
    void Add(Fruit *fruit); 
}; 

void FruitCollection::Add(Fruit *fruit) 
{ 
    fruits.push_back(fruit); 
} 

這是在大多數情況下可能是矯枉過正,你可能會需要遠遠更多的操作比這個非常簡單例。

+0

我需要一個關於addFruit的函數。我怎樣才能做到這一點?? – 2011-04-09 02:20:44

+0

@Josh:你究竟想要完成什麼?你的問題很模糊。 – 2011-04-09 02:21:50

+0

我想要一個功能。這個函數就像addFruit()。它可以在main()中調用。功能將這些水果推回到媒介。 – 2011-04-09 02:25:44

5

Hmmmm .....

vector<fruit*> fruits; 

fruits.push_back(new apple()); 
fruits.push_back(new pear()); 

等? 是你在找什麼?

+0

我不確定。讓我先試試它。 – 2011-04-09 02:10:09

+0

我想我需要一個功能。它應該可以在main中調用。 – 2011-04-09 02:11:00

+0

它應該主要調用?這是如何相關的。 – dcousens 2011-04-09 03:09:45

相關問題