如何将对象传递给重载构造函数? C ++

时间:2017-04-18 03:57:51

标签: c++ constructor overloading

我如何将对象(在我的Snack对象中)传递给重载的构造函数?

根据说明:

  

它应该有两个数据成员 - Snack,以及当前位于广告位中的Snac k的数量。

我如何将该零食对象传递给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;


}

3 个答案:

答案 0 :(得分:1)

你的构造函数都以某种方式不正确

ITPHOFPWRFL01B E:\ || 489.9106GB || 549.9971GB ..

基本上,您的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 目前还不清楚你是什么意思

  

如何为对象使用get函数?

你指的是哪个对象? int函数应该返回成员变量getSnack

的副本

修改

您编辑的代码仍在构造函数中使用局部变量,并且不会初始化成员变量snacks。这是你出错的地方。

您可以采用这种方式实现默认构造函数,假设以下值为默认值(作为示例)

snacks

答案 1 :(得分:0)

首先,您应该实例化一个Snack对象,然后将其传递给VendSlot类的重载构造函数。

Snack mySnack;
VendSlot slot(mySnack, 12);

这将实例化一个VendSlot类型的对象,其中mySnack对象被传递到构造函数中,12是第二个参数,数量。

答案 2 :(得分:0)

来自您可以做的其他课程&gt;

VendSlot myVendSlot(mySnack, 5);

获取变量 numOfSnacks 将getter修改为

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

并且做:

int x = myVendSlot.getSnack();