[英]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.