Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将对象传递给重载构造函数?C++;_C++_Constructor_Overloading - Fatal编程技术网

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

C++ 如何将对象传递给重载构造函数?C++;,c++,constructor,overloading,C++,Constructor,Overloading,如何将对象(在我的例子中是Snackobject)传递给重载构造函数 按照说明: 它应该有两个数据成员-aSnack,以及当前插槽中的Snack的数量 我如何将snack对象传递给我的VendSlot构造函数 VendSlot::VendSlot() //default constructor { Snack snackItem; numOfSnacks = 5; } VendSlot::VendSlot(Snack snacks, int quantity) //overl

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

按照说明:

它应该有两个数据成员-a
Snack
,以及当前插槽中的
Snac
k的数量

我如何将snack对象传递给我的
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;


}
#包括
#包括
#包括“零食.h”
#包括“VendSlot.h”
#包括“miniVend.h”
使用std::cout;
使用std::cin;
使用std::string;
使用std::endl;
int main()
{
零食s1(“玉米片”,0.75200);
零食s2(“糖果棒”,1.25300);
零食s3(“根啤酒”,2.00450);
槽vs1(s1,2);
槽vs2(s2,1);
vs3(s3,0);
VendSlot vs4;//五瓶水
小型贩卖机(vs1、vs2、vs3、vs4、0);

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

Snack mySnack;
VendSlot slot(mySnack, 12);

这将实例化类型为
VendSlot
的对象,并将
mySnack
对象与
12
作为第二个参数quantity一起传递到构造函数中。

您可以从另一个类中执行>

VendSlot myVendSlot(mySnack, 5);
要获取变量numf请将getter修改为

int VendSlot::getSnack()
{
    return numOfSnacks; 
}
并且做:

int x = myVendSlot.getSnack();

两个构造函数在某种程度上都是不正确的

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;
}
注意,
getSnack
函数应该返回type
Snack
而不是
int
不清楚你说的是什么意思

如何对对象使用get函数

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

编辑


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

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


从何处将snack对象传递给我的VendSlot构造函数??从默认构造函数???不,我希望通过重载构造函数传递它,默认构造函数已经接受了以下`snacksnackitem;numOfSnacks=5;`我们需要看到更多的代码-a会很有帮助。您似乎没有
snackVendSlot
类中的code>member变量,因此
Snack snackObjects=snaks;
没有做任何有用的事情。您的代码毫无意义。在两个构造函数中声明的
SnackObject
是无意义的;对象应该通过引用传递,而不是通过值传递。不清楚您实际要求的是什么。您有类中的
snakt snakt
snakt snakt
都有。这没有什么意义。但是名称
getsnakt()
表明他们想要返回一个snakt,而不是它们的计数。OP还写了“如何对对象使用get函数?”你是对的……但是为什么该方法返回int呢?为了让答案更清楚,我编辑了我的帖子……谢谢@KenY-N
public:VendSlot();//默认构造函数Snack mySnack;//实例化Snack对象VendSlot(Snack the_snacks,int quantity);Snack getSnack();//返回Snack int getAmount());//获取可用零食数量void decrementAmount(int);//函数将自动售货机中的存储量减少1。~VendSlot();//析构函数private:Snack Snack;//传递Snack对象int numoffsnacks;//零食数量
是否正确?然后我按如下方式调用它-
VendSlot::VendSlot()//默认构造函数{snakt snackItem;numofsnakts=5;}VendSlot::VendSlot(snakt,int-quantity)//重载构造函数{Snack mySnack;numOfSnacks=quantity;
您应该将这段代码作为问题的一部分发布。@Timk10,您如何调用?您编辑的代码在构造函数中仍然使用局部变量,并且不会初始化成员变量
snacks
。这就是您出错的地方。
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; }
};
// "root beer", 2.00, 450
VendSlot::VendSlot(): snacks("root beer", 2.00, 450), numOfSnacks(1) {
}