[英]Access Vector in class with “class[i]” like class would be the vector
[英]How would I send values in a vector to a class?
我被指派将 excel 电子表格翻译成 C++ 程序。
excel 电子表格是一份月度预算报告,用户必须在其中设置他使用的每项服务的成本/收入,比方说,水、煤气、电、amazon.com 等。
之后,再次要求用户提交他支付的百分比,以计算他为每项服务单独支付的费用……我对那句话有些迷茫。
为此,我要求用户使用 do-while 输入值:
double value;
cin >> value;
do {
passToVector(value);
cin >> value;
} while(value != 0);
passToVector 函数然后将值存储在 expensesList 向量中:
void passToVector(double value){
vector<double> expensesList;
expensesList.push_back(value);
};
这就是我迷路的地方,班级应该能够接收这些值以便在需要时更新它们。 这是我的班级的一个例子:
class Expenses {
private:
double percentage = 0.00;
double mortgage = 0.00;
double electric = 0.00;
double gas = 0.00;
double water = 0.00;
public:
// Set percentage each person brings
void setPercentage(double per) { percentage = per; }
double getPercentage() const { return percentage / 100; }
// Calculate Total Expenses by Person
void calculatePersonExpenses() {
double result = mortgage * getPercentage();
double result2 = electric * getPercentage();
double result3 = gas * getPercentage();
double result4 = water * getPercentage();
cout << "Mortgage: $" << fixed << setprecision(2) << result << endl;
cout << "Electricity: $" << fixed << setprecision(2) << result2 << endl;
cout << "Gas(Home): $" << fixed << setprecision(2) << result3 << endl;
cout << "Water: $" << fixed << setprecision(2) << result4 << endl;
}
};
首先,我假设我需要为每个服务创建 setter 和 getter,但如果我这样做了……为什么我需要一个向量函数?; 现在我拥有的唯一功能是 setPercentage 的功能。 任务只是将值存储在类对象数据结构的向量中。
如何在需要时自动更新这些值? 我必须将这些值发送给班级还是我的方法完全错误?
希望我能解释一下自己。
当你打字时
void passToVector(double value){
vector<double> expensesList;
expensesList.push_back(value);
};
您必须意识到expensesList
是一个局部变量。 它在此函数的范围内创建,并在最后删除。 即你失去了所有的行动。
现在,您可以有一个费用向量:
#include <string_view>
#include <iostream>
template<typename T>
T ReadCin(std::string_view const& str = "") {
if (!str.empty()) std::cout << str;
T retVal;
std::cin >> retVal;
return retVal;
}
class Expenses {
private:
double percentage{ 0 };
double mortgage{ 0 };
double electric{ 0 };
double gas{ 0 };
double water{ 0 };
public:
Expenses() = default;
Expenses(double percentage, double mortgage, double electric, double gas, double water)
:percentage(percentage), mortgage(mortgage), electric(electric), gas(gas), water(water)
{}
static Expenses NewItem() { return {
ReadCin<decltype(percentage)>("What percentage?\n"),
ReadCin<decltype(mortgage)>("What mortgage?\n"),
ReadCin<decltype(electric)>("What electric?\n"),
ReadCin<decltype(gas)>("What gas?\n"),
ReadCin<decltype(water)>("What water?\n") };
}
};
#include <vector>
int main() {
std::vector<Expenses> expensesList;
expensesList.push_back(Expenses::NewItem());
}
或者你可以在类Expenses
中列出费用清单
class Expenses {
private:
std::vector<double> expensesList {};
//[...etc]
public:
void AddExpense(double value) noexcept {
expenseList.push_back(value);
}
这一切都取决于你想要什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.