【问题标题】:C++ printing contents of array that was declared in mainC++ 打印在 main 中声明的数组的内容
【发布时间】:2016-05-01 01:05:12
【问题描述】:

处理必须在主程序中声明数组的程序(在本例中为distList[5]),并且必须将其发送给必须由用户输入填充的成员(inputDist),然后从那里发送给另一个成员 (printAndAdd) 以打印和添加,如名称所示。我相信我已经填满了数组,但我不知道如何从那里开始。任何帮助表示赞赏。

void CDistance::inputDist(CDistance distList[], int size)
{

    for (int i = 0; i < 1; i++)
    {
        cout << "Please enter 5 digits following each one with a space to place into the array: " << endl;
        int ui1;    cin >> ui1;
        int ui2;    cin >> ui2;
        int ui3;    cin >> ui3;
        int ui4;    cin >> ui4;
        int ui5;    cin >> ui5;
        distList[i] = CDistance(ui1, ui2, ui3, ui4, ui5);
        cout << distList;

    }
}

void CDistance::printAndAdd(const CDistance distList[], int size)
{
    //cout << distList;
}

int main()
{
    CDistance distList[5];

    CDistance d1, d2(0, 0, 0, 0, 0);

    d1.setDistt();
    d1.printDistt();
    d1.menu(d2);
    d1.inputDist(distList, 5);
    d1.printAndAdd(distList, 5);
    _getch();
    return 0;
}

另外,CDistance 的类定义如下:

class CDistance
{
private:
    int feet;
    int inches;
    int feet2;
    int inches2;
    int five;

public:
    CDistance();
    CDistance(int, int, int, int, int);
    ~CDistance();
    void setDistt();
    void printDistt() const;
    void add(const CDistance&) const;
    void subtract(const CDistance&) const;
    void menu(const CDistance&) const;
    void inputDist(CDistance distList[], int size);
    void printAndAdd(const CDistance distList[], int size);
};

CDistance::CDistance()
{
    feet = 0;
    inches = 0;
    feet2 = 0;
    inches2 = 0;
    five = 0;
}

CDistance::CDistance(int f, int i, int f2, int i2, int fi)
{
    feet = f;
    inches = i;
    feet2 = f2;
    inches2 = i2;
    five = fi;
}

CDistance::~CDistance()
{
}

【问题讨论】:

  • 您需要的第一个帮助是了解函数和类方法之间的区别:“...一个必须由用户输入填充的函数 (inputDist)”。您的 inputDist() 不是一个函数,它是一个类方法。 “......然后从那里发送到另一个函数(printAndAdd)”。 printAndAdd() 也不是一个函数。它也是一个类方法。你需要重新开始,花点时间了解一下函数和类方法的区别,然后你可以再试一次。
  • 发布的代码可以在很多不同的地方进行改进。由于您没有提出具体问题,因此很难提出任何具体的建议。这个网站不是关于通用代码审查的。
  • 我正在尝试打印出distlist[5] 的内容,这些内容是在班级成员inputDist 中填写的。 @RSahu
  • 好的。有什么问题?
  • 我该怎么做?当我尝试 for 循环,尝试打印内容时,它给了我“没有运算符 '

标签: c++ arrays class io


【解决方案1】:

在评论中,你说:

我会怎么做呢?当我尝试 for 循环,尝试打印内容时,它给了我“没有运算符 '

声明 operator&gt;&gt;operator&lt;&lt; 重载以允许您从流中读取 CDistance 并将 CDistance 写入流。

class CDistance;
std::istream& operator>>(std::istream& is, CDistance& distance);
std::ostream& operator<<(std::ostream& os, CDistance const& distance);

让他们成为班级的friends。

class CDistance
{

   ...

   friend std::istream& operator>>(std::istream& is, CDistance& distance);
   friend std::ostream& operator<<(std::ostream& os, CDistance const& distance);

};

实施它们。

std::istream& operator>>(std::istream& is, CDistance& d)
{
   return (is >> d.feet >> d.inches >> d.feet2 >> d.inches2 >> d.five);
}

std::ostream& operator<<(std::ostream& os, CDistance const& distance);
{
   // Add a space between the members when writing it out.
   return (is << d.feet << " " << d.inches << " "
              << d.feet2 << " " << d.inches2 << " " << d.five);
}

现在你可以使用

Distance d;
std::cin >> d;
std::cout << d << std::endl;

我建议进行以下额外改进:

您不需要inputDistprintAndAdd 成为该类的成员函数,因为它们不需要访问该类的private 成员。它们可以是非成员函数。

void inputDist(CDistance distList[], int size)
{
   // for (int i = 0; i < 1; i++)
   for (int i = 0; i < size; i++) // Use size, not 1
   {
      cout << "Please enter 5 digits following each one with a space to place into the array: " << endl;
      cin >> distList[i];
      cout << distList << endl;
   }
}

void printAndAdd(const CDistance distList[], int size)
{
   for (int i = 0; i < size; i++)
   {
      cout << distList[i] << std::endl;
      // Not sure what "Add" means to you.
   }
}

【讨论】:

  • 我在回答自己的问题时删除了之前的评论。谢谢您的帮助!我是 C++ 的初学者,这个重载内容的操作对我来说非常令人困惑。
  • 您有什么机会可以帮助我解决附加过载问题?这就是我到目前为止所做的:class CDistance CDistance&amp; operator+ (CDistance&amp; add, CDistance&amp; distance);CDistance&amp; operator+ (CDistance&amp; add, CDistance&amp; di) { int add = di.feet + di.inches + di.feet2 + di.inches2 + di.five; return add; } 我知道这看起来绝对是垃圾。我不确定是否有其他方法可以清理它?
  • @JustinFarr,不要把它当作免费的咨询会议 :) 拿一本教科书,阅读运算符重载的基础知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2017-10-11
相关资源
最近更新 更多