繁体   English   中英

我如何将向量中的值发送给类?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM