如何允许用户输入对象和类?

时间:2018-09-26 01:10:12

标签: c++ class object

考虑以下代码:

#include <iostream>
using namespace std;
class inventory
{
public:

    ~inventory()
    {
        cout << "This Object is being destroyed" << endl;
    }

    inventory()
    {
        itemNumber = 0;
        quantity= 0;
        cost= 0;
    }
    inventory(int itemNumber1, int quantity1, double cost1)
    {
        setItemNumber(itemNumber1);
        setQuantity(quantity1);
        setCost(cost1);


    }
    void setItemNumber(int itemNumber2)
    {
        itemNumber=itemNumber2;
    }
    bool setQuantity(int quantity2)
    {
        bool userTrue = true;
        bool userFalse = false;
        if (quantity2 < 0)
        {
            quantity = 0;
            return userFalse;
        }
        else
        {
            quantity= quantity2;
            return userTrue;
        }
    }
    bool setCost(double cost2)
    {
        bool userTrue = true;
        bool userFalse = false;
        if (cost2 < 0.0)
        {
            cost = 0.0;
            return userFalse;
        }
        else
        {
            cost= cost2;
            return userTrue;
        }
    }
    double getTotalCost(int quantity, double cost)
    {
        int total;
        total = (quantity * cost);
        return total;
    }
private:
    int itemNumber;
    int quantity;
    double cost;
};
int main()
{
    int itemNumberInput;
    int quantityInput;
    double costInput;
    cout << "Enter the Item Number: " << endl;
    cin >> itemNumberInput;
    cout << "Enter the Quantity : " << endl;
    cin >> quantityInput;
    cout << "Enter the Cost : " << endl;
    cin >> costInput;


    inventory *pointerA, *pointerB;
    pointerA = new inventory;
    pointerB = new inventory(inventory(itemNumberInput , quantityInput , costInput));
    inventory firstObject(itemNumberInput,quantityInput,costInput);




    int itemNumberInput1;
    int quantityInput1;
    double costInput1;
    cout << "Enter the Item Number: " << endl;
    cin >> itemNumberInput1;
    cout << "Enter the Quantity : " << endl;
    cin >> quantityInput1;
    cout << "Enter the Cost : " << endl;
    cin >> costInput1;
    inventory secondObject(itemNumberInput1,quantityInput1,costInput1); // not sure if thats correct
    cout << secondObject.setItemNumber(); // not working
    cout << secondObject.setQuantity(); // not working
    cout << secondObject.setCost(); // not working



    return 0;
}

上面的代码应该接受三个用户输入,并将其发送给类,然后这些类将完成其工作。

我目前陷入困境,这给了我一个错误。

在第二个向用户询问值的对象中,它应该将这些值发送给类。

相反,我遇到了错误。

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

您已经使用用户输入的值作为参数,使用3-arg构造函数构造了“ secondObject”对象。因此,此对象的成员变量是通过构造函数设置的,实际上不需要使用'set'方法。在您的情况下,如果您以后想要更改值,则set方法将很有用。例如,假设用户输入10、10和2.5作为值。然后,您将使用构造函数使用这些值构造对象。唯一的区别是您首先将这些值放入变量中。但它的工作方式相同。如果您以后想要更改数量的值,可以执行secondObject.setQuantity(2);并将该对象的数量设置为2。之所以调用.set无效的原因是,您需要传递这些方法的参数,即您想要设置的值。

关于要打印的析构函数方法,对象超出范围时将被销毁,从而释放内存。通常,就输出而言,什么也不会发生-对象将超出范围,而编译器将释放内存并开始其业务。但是,您已经编码了一个自定义析构函数,该析构函数打印出“对象正在被破坏”,它位于主体的末尾。您的构造函数可能工作正常,但我不确定您预期会发生什么。我还建议您阅读C ++中的内存泄漏信息,尤其是有关'new'关键字的信息。

答案 1 :(得分:0)

这是固定代码:-

#include <iostream>
using namespace std;

class inventory
{
public:

    ~inventory()
    {
        cout << "This Object is being destroyed" << endl;
    }

    inventory()
    {
        itemNumber = 0;
        quantity= 0;
        cost= 0;
    }
    inventory(int itemNumber, int quantity, double cost)
    {
        this->itemNumber = itemNumber;
        this->quantity = quantity;
        this->cost = cost;


    }
    void setItemNumber(int itemNumber)
    {
        this->itemNumber=itemNumber;
    }

    bool setQuantity(int quantity)
    {
        bool userTrue = true;
        bool userFalse = false;
        if (quantity < 0)
        {
            this->quantity = 0;
            return userFalse;
        }
        else
        {
            this->quantity= quantity;
            return userTrue;
        }
    }

    bool setCost(double cost)
    {
        bool userTrue = true;
        bool userFalse = false;
        if (cost < 0.0)
        {
            this->cost = 0.0;
            return userFalse;
        }
        else
        {
            this->cost= cost;
            return userTrue;
        }
    }

    double getTotalCost(int quantity, double cost)
    {
        return quantity * cost;
    }

private:
    int itemNumber;
    int quantity;
    double cost;
};

int main()
{
    int itemNumberInput;
    int quantityInput;
    double costInput;
    cout << "Enter the Item Number: " << endl;
    cin >> itemNumberInput;
    cout << "Enter the Quantity : " << endl;
    cin >> quantityInput;
    cout << "Enter the Cost : " << endl;
    cin >> costInput;

    inventory *pointerA, *pointerB;
    pointerA = new inventory;
    pointerB = new inventory(inventory(itemNumberInput , quantityInput , costInput));
    inventory firstObject(itemNumberInput,quantityInput,costInput);

    int itemNumberInput1;
    int quantityInput1;
    double costInput1;
    cout << "Enter the Item Number: " << endl;
    cin >> itemNumberInput1;
    cout << "Enter the Quantity : " << endl;
    cin >> quantityInput1;
    cout << "Enter the Cost : " << endl;
    cin >> costInput1;
    // The below line is correct
    // inventory secondObject(itemNumberInput1,quantityInput1,costInput1); 

    //Alternatively
    inventory secondObject;
    secondObject.setItemNumber(itemNumberInput1); 
    secondObject.setQuantity(quantityInput1); 
    secondObject.setCost(costInput1); 

    delete pointerA; // delete dynamically allocated memory to avoid memory leak
    delete pointerB;

    return 0;
}