簡體   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