你如何制作类对象的向量?

时间:2016-02-28 23:42:57

标签: c++ vector

我对矢量如何工作有点困惑。我要做的是创建一个包含5个TaxBill个对象的向量。然后,我想要做的是从一个输入文件中读取,该文件具有5个州的名称和不同的税率。我想在int main()中的数组中存储状态的名称和状态的税率。

这是名为“Tax Rates.dat”的输入文件。这些数字分别是每个州的销售税率,财产税率和所得税率。

TEXAS      .0825 .02 -.03
MARYLAND   .065 .04 .05
OHIO       .03 .025 .03
CALIFORNIA .095 .055 .045
MAINE      .02 .015 .02

这是我的类界面“Tax Bill.h”。

using namespace std;

class TaxBill
{
public:
      void setValue(string, int);
      void dataValid(double&, double&, double&);

private:
      string Name;
      int index;
      double taxBill;
}

这是我的类实现,名为“Tax Bill.cpp”。

#include "Tax Bill.h"

void TaxBill::setValue(string name, int x)
{}


void TaxBill::dataValid(double& a, double& b, double& c)
{
      if(a < 0)
            a = 0;
      if(b < 0)
            b = 0;
      if(c < 0)
            c = 0;

      return;
}

到目前为止,这是我的主要源代码。

#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <vector>
#include "Tax Bill.h"

using namespace std;


int main()
{
      const int SALARY = 100000,
            HOUSE = 246000,
            PURCHASE = 36000;
      ifstream fin;
      fin.open("Tax Rates.dat");
      vector <TaxBill> someVector (5);
      double sales,
            property,
            income;
      double taxRates[5][3];
      string name;

      if(!fin)
            return 0;
      else
      {
            for(int i = 0; fin >> name >> sales >> property >> income; i++)
            {
                  dataValid(sales, property, income);
                  taxRates[i][0] = sales;
                  taxRates[i][1] = property;
                  taxRates[i][2] = income;
            }
      }

for循环是我想要将从输入文件和i读取的状态名称存储到类对象的字符串Nameindex中的位置。索引的原因是因为在程序的后面我想按字母顺序对矢量中的对象进行排序,而不是存储相应税率的数组。

我也不想使用函数push_back()

我想我的问题是,如何制作5个类对象的向量并访问它们?

请记住,我的计划很难完成,这是阻碍我的一个障碍。

1 个答案:

答案 0 :(得分:2)

这里使用代码中的vector的示例。在这里你声明

vector <TaxBill> someVector (5);

所以现在,你有someVector [0] - [4](总共5个)。要使用它,实际上你只需要像普通数组一样分配它。

someVector[0].{insert property here}

但是等等,在你的课堂上,没有明确的方法来设置字符串名称和索引。所以我觉得你忘了把它放在这里,因此我在课堂上自己创作。

class TaxBill
{
public:
      void setValue(string Name, int Index){
         name = Name; index = Index;
      }
      void dataValid(double&, double&, double&);

private:
      string name;
      int index;
      double taxBill;
}

现在使用向量,我只是以这种方式使用了属性

someVector[0].setValue("someName",1);

田田,你得到它的作品。顺便说一句,我不知道为什么你在课堂上声明一个程序,但你想在主程序中多次使用它。我的意思是这个

dataValid(sales, property, income);

要使用它,我建议你在主程序而不是在课堂上制作程序,无论如何该行应该产生错误。 :)