Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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++ 我的代码可以工作,但setter不能';我不能创建新对象,所以我得到了错误的结果_C++ - Fatal编程技术网

C++ 我的代码可以工作,但setter不能';我不能创建新对象,所以我得到了错误的结果

C++ 我的代码可以工作,但setter不能';我不能创建新对象,所以我得到了错误的结果,c++,C++,因此,每当我发布以下代码时,我都会得到错误的响应, 类成员变量确实会使用我的setter进行更新,但由于某些原因,最终成本是不正确的。我不允许更改main.cpp代码 我认为这可能与setter有关,但我不知道如何强制setter调用构造函数,以便调用setTotalCost() main.cpp #include <iostream> #include <iomanip> #include "Inventory.h" using namespace std; int

因此,每当我发布以下代码时,我都会得到错误的响应, 类成员变量确实会使用我的setter进行更新,但由于某些原因,最终成本是不正确的。我不允许更改main.cpp代码

我认为这可能与setter有关,但我不知道如何强制setter调用构造函数,以便调用setTotalCost()

main.cpp

#include <iostream>
#include <iomanip>
#include "Inventory.h"

using namespace std;

int main()
{
    cout << fixed
         << showpoint
         << setprecision(2);

    // Demonstrate the default constructor
    Inventory stockItem1;
    cout << "\nDemonstrating the default constructor...\n";
    cout << "Item number: " << stockItem1.getItemNumber() << endl;
    cout << "Quantity   : " << stockItem1.getQuantity() << endl;
    cout << "Cost       : " << stockItem1.getCost() << endl;
    cout << "Total Cost : " << stockItem1.getTotalCost() << endl;

    // Now demonstrate the overloaded constructor
    Inventory stockItem2(124, 12, 84.95);
    cout << "\nDemonstrating the overloaded constructor...\n";
    cout << "Item number: " << stockItem2.getItemNumber() << endl;
    cout << "Quantity   : " << stockItem2.getQuantity() << endl;
    cout << "Cost       : " << stockItem2.getCost() << endl;
    cout << "Total Cost : " << stockItem2.getTotalCost() << endl;

    // Now demonstrate the member "set" functions
    stockItem2.setItemNumber(243);
    stockItem2.setQuantity(50);
    stockItem2.setCost(9.50);
    cout << "\nDemonstrating the \"set\" functions...\n";
    cout << "Item number: " << stockItem2.getItemNumber() << endl;
    cout << "Quantity   : " << stockItem2.getQuantity() << endl;
    cout << "Cost       : " << stockItem2.getCost() << endl;
    cout << "Total Cost : " << stockItem2.getTotalCost() << endl;

    // Now demonstrate the input validation functions
    cout << "\nDemonstrating the input validation functions...\n";
    stockItem2.setItemNumber(-1);
    stockItem2.setQuantity(-1);
    stockItem2.setCost(-1);

    cout << "\nItem number: " << stockItem2.getItemNumber() << endl;
    cout << "Quantity   : " << stockItem2.getQuantity() << endl;
    cout << "Cost       : " << stockItem2.getCost() << endl;
    cout << "Total Cost : " << stockItem2.getTotalCost() << endl;

    return 0;
}

进程已结束,退出代码为0

据我所见,在更改其他变量后,您不会调用setTotalCost()。它不会自动发生。
希望有帮助。

因此,您需要使getTotalCost()返回正确的值,而不必在更新该值的输入后显式调用setTotalCost()。有两种方法可以做到这一点——可以让输入的setter调用该setter,或者根本不能存储totalCost值,并在每次调用getTotalCost()时重新计算

我知道,但是有没有办法避免使用新的seTotalCost()并使其再次调用构造函数?或者构造函数只在值直接传递给它而不是通过setters时被调用?构造函数只在对象第一次创建时被调用@KianO'ryan如果不想更改main,可以更改setter,在更改其他变量后调用setTotalCost()。
serttottalCost
是一个
public
函数。它必须是公开的,因为它可以被类外的代码调用。为什么不直接调用
setTotalCost
?如果是<代码>私下的<代码>或<>代码>保护>代码>函数,那么可以理解“如何调用函数”,但它不是其中之一——它是代码>公共< /代码>。这是我的C++课程,而Me.CPP代码是向我们提供的,我们不允许改变它。但是我同意你的观点,调用setTotalCost不是最明智的行为,但不幸的是,我不允许这样做。那么
setTotalCost
的目的就是它没有任何用处。它不会在
main
中的任何地方调用,只是不必要的噪音。
getTotalCost
应该是执行计算的函数,因为
main
使用它。我唯一使用setTotalCost的时间是在构造函数期间。这就是我的观点。这只是一个旋转轮子的练习,调用
setTotalCost
。它不在
main
中使用,而total cost表示任何东西的唯一时间是调用
getTotalCost
。因此,应该是
getTotalCost
推动计算。我完全同意你的观点,但根据我的指示,我需要单独的get和set totalcosts:///setTotalCost :计算项目的总库存成本(数量乘以成本)并将结果存储在totalCost中。/////getTotalCost:返回totalCost中的值。///正确-因此需要在设置器的末尾调用setTotalCost()以获取输入。
//Header File

#include<iostream>
#ifndef INVENTORY_H
#define INVENTORY_H

class Inventory
{
private:
    int itemNumber;
    int quantity;
    double cost;
    double totalCost;

public:
    // default constructor, setting all values to 0
    Inventory();
    Inventory(int, int, double);
    void setItemNumber(int );
    void setQuantity(int );
    void setCost(double );
    void setTotalCost();
    int getItemNumber();
    int getQuantity();
    double getCost();
    double getTotalCost();




};

#endif //PROGRAM6_INVENTORY_H
#include <iostream>
#include "Inventory.h"
using namespace std;

Inventory :: Inventory()
{
    itemNumber = 0;
    quantity = 0;
    cost = 0;
    totalCost = 0;
}

Inventory ::Inventory(int itemNumber, int quantity, double cost)
{
    setItemNumber(itemNumber);
    setQuantity(quantity);
    setCost(cost);
    setTotalCost();
}

void Inventory ::setItemNumber(int theItemNumber)
{
    if (theItemNumber > 0)
    {
        itemNumber = theItemNumber;
    }
    else
    {
        cout << "You entered " << theItemNumber << " as your item number. Only positive numbers are accepted"<<endl;
    }
}

void Inventory ::setQuantity(int quantityOfItems)
{
    cout << "Setting quantity to " << quantityOfItems << endl;
    if (quantityOfItems > 0)
    {
        quantity = quantityOfItems;
    }
    else
    {
        cout << "You entered " << quantityOfItems << " as your item quantity. Only positive numbers are accepted"
             << endl;
    }
}

void Inventory ::setCost(double costOfItems)
{
    if (costOfItems > 0)
    {
        cost = costOfItems;
    }
    else
    {
        cout << "You entered " << costOfItems << " item cost. Only positive numbers are accepted" << endl;
        exit(0);
    }
}

void Inventory ::setTotalCost()
{
    int itemCount = getQuantity();
    double itemCost = getCost();
    totalCost = itemCost * itemCount;

}

int Inventory ::getItemNumber()
{
    return itemNumber;
}
int Inventory ::getQuantity()
{
    return quantity;
}
double Inventory ::getCost()
{
    return cost;
}
double Inventory ::getTotalCost()
{
    return totalCost;
}
Demonstrating the default constructor...

Item number: 0

Quantity   : 0

Cost       : 0.00

Total Cost : 0.00

Demonstrating the overloaded constructor...

Item number: 124

Quantity   : 12

Cost       : 84.95

Total Cost : 1019.40


Demonstrating the "set" functions...

Item number: 243

Quantity   : 50

Cost       : 9.50

Total Cost : 1019.40


Demonstrating the input validation functions...

You entered -1 as your item number. Only positive numbers are accepted

You entered -1 as your item quantity. Only positive numbers are accepted

You entered -1.00 item cost. Only positive numbers are accepted