2017-04-18 16 views
-1

オブジェクトを(私の場合はSnackオブジェクト)オーバーロードされたコンストラクタに渡す方法は?指示に従ってオーバーロードコンストラクタにオブジェクトを渡すにはどうすればよいですか? C++

: - Snack、及びスロットに現在あることSnac kの量

これは、2人のデータメンバーを有するべきです。

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

を実装することができます?デフォルトのコンストラクタから??? –

+0

いいえ私はそれをオーバーロードコンストラクタに渡すことを望んでいましたが、デフォルトのコンストラクタはすでに次の '\t Snack snackItem; \t numOfSnacks = 5; ' – Timk10

+0

もっとコードを見る必要があります - [mcve]が大いに役立つでしょう。たとえば、 'VendSlot'クラスに' Snack'メンバ変数がないように見えるので、 'Snack snackObjects = snacks;'は何も役に立ちません。 –

答えて

0

まず、あなたは、あなたがあなたのVendSlotクラスのオーバーロードされたコンストラクタにそれを渡すことができ、Snackオブジェクトをインスタンス化する必要があります。

Snack mySnack; 
VendSlot slot(mySnack, 12); 

これは12は第二引数、量であるとともに、コンストラクタに渡されるmySnackオブジェクトとタイプVendSlotのオブジェクトをインスタンス化します。

0

あなたは変数numOfSnacks

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

にゲッターを変更して行い得るために>

VendSlot myVendSlot(mySnack, 5); 

を行うことができます別のクラスから:

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

EDIT

編集したコードはまだ、コンストラクタ内のローカル変数を使用し、メンバ変数snacksを初期化しません。これはあなたが間違っているところです。

あなたのデフォルトコンストラクタ(一例として)は、デフォルトとして以下の値を仮定して、このようVendSlotのための私のコンストラクタにそのスナックオブジェクトを渡すところから

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

'public: \t VendSlot(); //デフォルトのコンストラクタ \t Snack mySnack; //スナックオブジェクトをインスタンス化します \t VendSlot(snack the_snacks、int quantity); \t Snack getSnack(); //スナックを返す \t int getAmount(); //利用できる軽食の量を取得する \t void decrementAmount(int); //自動販売機の記憶容量を1減らす機能。 〜VendSlot(); //デストラクタ プライベート: \tスナックスナック; // snackオブジェクトを渡す \t int numOfSnacks; //軽食の数 ' – Timk10

+0

上記は正しいですか?次に、私はそれを以下のように呼びます: 'VendSlot :: VendSlot()//デフォルトコンストラクタ { \t Snack snackItem; \t numOfSnacks = 5; } VendSlot :: VendSlot(Snack、int quantity)//オーバーロードコンストラクタ { \t Snack mySnack; numOfSnacks = quantity; ' – Timk10

+1

このコードを質問の一部として投稿する必要があります。 – Rishi

関連する問題