2017-04-18 170 views
-1

我將如何去傳遞一個對象(在我的例子中是Snack對象)到一個重載的構造函數?如何將對象傳遞給重載構造函數? C++

每所述指令:

它應具有兩個數據成員 - 一個Snack,而且Snacķ當前在所述狹槽的量。

我該如何着手將零食物品傳遞給我的構造函數VendSlot

VendSlot::VendSlot() //default constructor 
{ 
    Snack snackItem; 
    numOfSnacks = 5; 
} 

VendSlot::VendSlot(Snack snacks, int quantity) //overloaded constructor 
{ 
    Snack snackObjects = snacks; 
    numOfSnacks = quantity; 
} 

這裏是我的getSnack()功能:我怎麼使用get函數的對象?

int VendSlot::getSnack() 
{ 
    return snacks; //I have no idea how to call the snack object through here? 
} 

EDIT2我這些作品的代碼更新,但現在這些正確嗎?

public: 
    VendSlot(); //default constructor 
    Snack snacks; //instantiate Snack object 
    VendSlot(Snack the_snacks, int quantity); 
    Snack getSnack(); //return snack 
    int getAmount(); //get amount of snacks available 
    void decrementAmount(int); //function to decrease storage in vending machine by 1. 
    ~VendSlot(); //destructor 

private: 
    Snack snack; //passes snack object 
    int numOfSnacks; // number of snacks 
{ 
    Snack snackItem; 
    numOfSnacks = 5; 
} 

VendSlot::VendSlot(Snack the_snacks, int quantity) //overload constructor 
{ 
    snacks = the_snacks; 
    numOfSnacks = quantity; 
    } 
int VendSlot::getAmount() 
{ 
    return numOfSnacks; 
} 

這是需要的主要功能 - 有很多其他項目,但我覺得上面是我的問題的一部分。

#include <iostream> 
#include <string> 
#include "Snack.h" 
#include "VendSlot.h" 
#include "miniVend.h" 


using std::cout; 
using std::cin; 
using std::string; 
using std::endl; 

int main() 
{ 
    Snack s1("corn chips", 0.75, 200); 
    Snack s2("candy bar", 1.25, 300); 
    Snack s3("root beer", 2.00, 450); 

    VendSlot vs1(s1, 2); 
    VendSlot vs2(s2, 1); 
    VendSlot vs3(s3, 0); 
    VendSlot vs4; // five bottles of water 

    miniVend machine(vs1, vs2, vs3, vs4, 0); 



    cout << machine.numEmptySlots() << endl; 
    cout << machine.valueOfSnacks() << endl; 
    cout << machine.getMoney() << endl; 
// machine.buySnack(1); 
    cout << machine.numEmptySlots() << endl; 
    cout << machine.valueOfSnacks() << endl; 
    cout << machine.getMoney() << endl; 

    return 0; 


} 
+0

從那裏路過那個小吃對象到我的構造函數VendSlot?從默認的構造函數? –

+0

不,我希望通過它的重載構造函數,默認的構造函數已經採取了以下'\t小吃snackItem; \t numOfSnacks = 5; ' – Timk10

+0

我們需要看到更多的代碼 - [mcve]會有很大的幫助。例如,您的'VendSlot'類中似乎沒有'Snack'成員變量,因此'Snack snackObjects = snack;'沒有任何用處。 –

回答

0

首先,你應該實例化一個Snack對象,那麼你可以傳遞到您的VendSlot類的重載的構造函數。

Snack mySnack; 
VendSlot slot(mySnack, 12); 

這將實例VendSlot類型的對象與對象mySnack被傳遞到構造與12作爲第二個參數,數量沿。

0

從另一個類,你可以做>

VendSlot myVendSlot(mySnack, 5); 

得到可變numOfSnacks修改消氣劑

int VendSlot::getSnack() 
{ 
    return numOfSnacks; 
} 

做:

int x = myVendSlot.getSnack(); 
+0

但是'getSnack()'這個名字表明他們想要返回一個零食,而不是它們的數量。此外,OP寫道:「我如何使用get函數獲取對象?」 –

+0

你是對的......但爲什麼該方法返回一個int呢? –

+0

我沒有找到匹配的變量要麼... –

1

兩個你的構造函數是不正確的以某種方式

VendSlot::VendSlot() //default constructor 
{ 
    Snack snackItem; // <-- This is a local variable/object, it is not a member 
    numOfSnacks = 5; 
} 

VendSlot::VendSlot(Snack snacks, int quantity) //overload constructor 
{ 
    Snack snackObjects = snacks; // <-- This is a local variable/object, it is not a member 
    numOfSnacks = quantity; 
} 

基本上,你的VendSlot類應該是這樣的:

class VendSlot { 
    private: 
    Snack snacks; 
    int numOfSnacks; 
    public : 
    VendSlot(): numOfSnacks(0) { 
     // write some code to assign default value for snacks 
    } 
    VendSlot(Snack the_snacks, int quantity) : snacks(the_snacks), numOfSnacks(quantity) { 
    } 
    Snack getSnack() { return snacks; } 
}; 

注意getSnack函數返回類型Snack,而不是int 目前還不清楚你是什麼意思

如何我是否爲對象使用get函數?

你指的是哪一個對象?該getSnack功能應該返回成員變量的副本snacks

編輯

你編輯的代碼仍然使用局部變量在構造函數中,不初始化成員變量snacks。這是你出錯的地方。

你可以實現你的默認構造函數這樣假設下面的值作爲默認值(作爲一個例子)

// "root beer", 2.00, 450 
VendSlot::VendSlot(): snacks("root beer", 2.00, 450), numOfSnacks(1) { 
} 
+0

'公衆: \t VendSlot(); //默認構造函數 \t Snack mySnack; //實例化Snack對象 \t VendSlot(Snack the_snacks,int quantity); \t Snack getSnack(); //返回零食 \t int getAmount(); //獲得零食量 \t void decrementAmount(int); //用於將自動售貨機中的存儲減少1個。 〜VendSlot(); //析構器 私有: \t小吃小吃; //通過零食物品 \t int numOfSnacks; //零食數量 – Timk10

+0

以上是否正確?然後,我將它稱爲如下:'VendSlot :: VendSlot()//默認構造函數 { \t小吃snackItem; \t numOfSnacks = 5; } VendSlot :: VendSlot(Snack,int quantity)//過載構造函數 { \t Snack mySnack; numOfSnacks =數量;' – Timk10

+1

你應該張貼這段代碼作爲你的問題的一部分。 – Rishi