Каков наилучший способ получить серию целых чисел в классе? - PullRequest
0 голосов
/ 09 февраля 2020

Наше назначение - иметь класс, который принимает целочисленные значения по одному. С этими целочисленными значениями я должен делать множество разных вещей. Добавьте их, возьмите среднее значение, найдите наибольшее и наименьшее значение et c. Я могу написать функции для среднего и наибольшего значения и что угодно, но это самое начало, с которым я борюсь.

Как я могу получить пользовательский ввод в мой класс? У меня есть функция-член и конструктор. Функция «next» - это то, что я буду использовать для хранения и извлечения своих чисел из:

class Statistician{
    public:
        Statistician();

        void next (int r);
}

Я пытался написать для l oop внутри функции «next», которая будет заполнять и массив, чтобы получить каждое значение в классе, но это, кажется, чрезвычайно утомительный способ продолжить. Я не уверен, что будет дальше.

Должен ли я использовать массив, и если да, то как мне написать l oop, чтобы числа можно было вставлять по одному за раз? Или есть другой способ сделать это? Будет ли класс просто автоматически заполняться? (Это кажется маловероятным)

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

«Лучший» способ довольно самоуверенный. Некоторые люди считают, что лучший способ - использовать массив с жестким кодом (он действительно хорош для отладки). Некоторые люди предпочитают читать цифры из файла (непротиворечиво, не требует большого набора текста). Другие используют стандартный ввод. Есть и другие способы, такие как чтение с устройств.

Обычно для получения чисел в классе используется метод 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: Другой метод
Если у вас аллергия c на перегрузку операторов, вы можете объявить функцию ввода:

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);
    }
}
0 голосов
/ 09 февраля 2020

Предположим, что это псевдо-код вашего класса:

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 style), если хотите, вы можете использовать class.

И попытаться изучить все, что глубоко в C ++, потому что это действительно важно;) (я бы порекомендовал вам Deitel C ++ Как программировать )

...