Реализация множителя в классе статистики - PullRequest
0 голосов
/ 07 сентября 2011

Я работаю над заданием по программированию для своего класса структур данных, и мы работаем над созданием класса статистики.Одна из функций, которую мы должны иметь, - это иметь возможность взять список статистиков (число, сумма, минимум, максимум и среднее) и умножить его на определенное целое число.Ниже приведено то, что у меня есть для конкретной функции.Тем не менее, я теряюсь в том, куда идти, поскольку это, кажется, беспокоит.

statistician operator *(double scale, const statistician& s)
{
    scale*s;
    return s;
}

В приложении находится файл .h, который объясняет, что я пытаюсь сделать.я пишу файл реализации для этого файла .h и пытаюсь понять, как написать оператор статистики *, который определен в комментариях к файлу .h

http://www.cs.colorado.edu/%7Emain/projects/stats.h

Спасибоза любую помощь

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Код, который вы написали, выглядит так, как будто он компилируется, но вызывает бесконечный цикл, так как он вызывает сам себя.scale*s - это сокращение для operator*(scale, s), которое в настоящее время определяется функцией.Вам нужно заменить строку scale*s на baby-steps для компилятора.Это будет выглядеть примерно так:

statistician operator *(double scale, const statistician& s)
{
    statistician result
    result.count = /*???*/;
    result.total = /*???*/;
    /*etc*/;
    return result;
}

Как только это определено, вы также можете захотеть statistician*double, который может просто делать то, что вы запрограммировали как double*statistician, вот так.(Обратите внимание, что он не должен быть классом-другом, поскольку он вызывает только публичные функции)

statistician operator *(const statistician& s, double scale)
{
    return operator *(scale, s);
}
1 голос
/ 07 сентября 2011

Вы пытаетесь создать копию статистики класса, но масштабируется по шкале.Что-то вроде

statistician operator *(double scale, const statistician& s)
{
    statistician result(s);
    result.total *= scale;
    result.tinyest *= scale;
    result.largest *= scale;
    return result;
}

Функция-член scaleBy умножит соответствующие переменные-члены на соответствующий масштаб.

Вы бы не масштабировали счет.Если бы в вашем классе статистиков было что-то вроде дисперсии, вы, вероятно, умножили бы это на квадрат шкалы.

0 голосов
/ 07 сентября 2011

Вы пытаетесь реализовать оператор внутри класса или за его пределами?Прочтите Операторы в C ++ и решите!

...