【问题标题】:What is the best way to get a series of integers into a class?将一系列整数放入一个类的最佳方法是什么?
【发布时间】:2020-02-09 18:57:37
【问题描述】:

我们的任务是创建一个一次接收一个整数值的类。有了这些整数值,我应该做很多不同的事情。将它们相加,取平均值,找到最大值和最小值等。我可以编写平均值和最大值的函数,但这是我正在努力的开始。

如何让用户输入我的课程?我有一个成员函数和构造函数。我将使用“next”函数来存储和提取我的号码:

class Statistician{
    public:
        Statistician();

        void next (int r);
}

我尝试在“next”函数中编写一个 for 循环,该循环将填充和排列,以便将每个值放入类中,但这似乎是一种极其乏味的继续方式。我不确定接下来会发生什么。

我应该使用数组吗?如果可以,我将如何编写循环以便一次将数字放入一个?还是有其他方法可以做到这一点?类会自动填充吗? (这似乎不太可能)

【问题讨论】:

  • 您可以初始化一个数组(如果您想从 std I/O 获取输入,请使用 for 循环并初始化您的数组),然后将该数组传递给您对象的成员函数。
  • 该数组会在类之外还是成为类的对象> 我仍在学习什么是类以及对象如何工作。
  • 数组不需要做这个练习

标签: c++ class int populate


【解决方案1】:

“最好”的方式是相当固执的。有些人认为最好的方法是使用硬编码数组(非常适合调试)。有些人更喜欢从文件中读取数字(一致,不需要大量输入)。其他人使用标准输入。还有其他方法,例如从设备读取。

通常要将数字输入到一个类中,使用 input 方法。重载operator>> 是一种常用技术。

这是一个例子:

struct Statistician
{
  std::vector<int> numbers;
  friend std::istream& operator>>(std::istream& input, Statistician& s);
};

std::istream& operator>>(std::istream& input, Statistician& s)
{
    int n;
    while (input >> n)
    {
        s.numbers.push_back(n);
    }
    return input;
}

您总是可以在另一个函数中输入数据,然后将数据传递给您的 Statistician 类。

编辑 1:不同的方法
如果你对重载操作符过敏,你可以声明一个输入函数:

struct Statistician
{
  std::vector<int> numbers;
  void input_data(std::istream& input);
};

void Statistician::input_data(std::istream& input)
{
    int n;
    while (input >> n)
    {
        numbers.push_back(n);
    }
}

【讨论】:

  • 好的!所以重载操作员的讲座是上周的。那是在做什么?我想我知道它改变了操作符“>>”但我不确定它改变了什么?
  • 更改 operator&gt;&gt; 以便它使用istream 输入Statistician 类的所有数据。 std::coutstd::fstream 派生自 std::istream,因此您可以将其与控制台输入或文件一起使用。 push_back 将数字附加到 std::vector
  • 我编辑了我的答案以包含另一个使用输入法的示例。你可以比较两者。不同之处在于重载operator&gt;&gt; 并通过返回输入流来支持链接
  • 不,我对运算符重载不过敏。谢谢你,这真的很有帮助!!!
【解决方案2】:

假设它是你的类的伪代码:

class Statistician {
    Statistician();
    void next(int* a);
};

这是你的主要的伪代码:

int main() {
    int arraySize = 10;
    int anArray[arraySize];
    for (int i=0; i < arraySize; ++i) {
        cin >> anArray[i];
    }
    Statistician obj;
    obj.next(anArray);
}

这里我使用的是内置数组(C风格),如果需要,可以使用类。

并尝试深入学习 C++ 中的所有内容,因为这非常重要 ;)(我会推荐你​​ Deitel C++ 如何编程

【讨论】:

  • 顺便说一句,int anArray[arraySize] 是 VLA,不是 C++ 语言的标准。首选是使用std::vector 或使用operator new 动态分配内存。
  • @ThomasMatthews 谢谢,是的,我提到我使用“C 样式”数组,最好使用std::ararystd::vector ;)
  • 我的问题是我不会事先知道数组的大小。用户将继续输入数字,直到他们满意为止。
  • @Big_Nancy 那么你应该使用std::vector 类,也许还有一个 Sentinel 值来停止获取新的输入!
  • 我实际上已经完全放弃了向量,并使用了一个简单的计数器。添加新数字时,计数器会上升并更新取决于给定数字的功能。因为输入的数字不需要保存,所以不需要向量。谢谢大家的帮助想法。这真的帮助了我的理解!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多