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