Как я могу создать класс с одной переменной и по-прежнему работать с разными переменными одновременно?

У меня есть вопрос дизайна кода.

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

class Statistic{
public:
// constructors
Statistic();
Statistic(vector<double> &s);

// other functions
double calcMean(void);
double calcMean(vector<double> &s);
double calcVariance(void);

private:
vector<double> sample;
};

Теперь я хотел бы написать функцию calcCovariance это может вычислить ковариацию между двумя выборками. Его определение будет примерно таким:

double calcCovariance(vector<double> &s1, vector<double> &s2);

Тем не менее, класс содержит только одну закрытую переменную с именем sample, Как лучше всего спроектировать мою иерархию классов так, чтобы мой класс содержал только одну переменную sample, а я все еще могу работать с несколькими сэмплами одновременно?

Заранее спасибо.

0

Решение

Поместите функцию за пределы класса (что, я думаю, не требуется после обсуждения :-)), и если Statistics класс по какой-то причине требуется, предоставить доступ к sample например

namespace utilitystuff
{
double calcCovariance(const vector<double> &s1, const vector<double> &s2)
{
//definition
}
}

Доступ к образцу:

const vector<double>& Statistics::getSample{return sample;}

И назовите это так:

//Assuming we have Statistics objects stats1 and stats2.
double covariance = utilitystuff::calcCovariance(stats1.getSample(), stats2.getSample());
0

Другие решения

определите свой класс примерно так:

class Statistic{
public:
// constructors
Statistic();
explicit Statistic(vector<double> &s);

// other functions
double calcMean(void) const;
double calcVariance(void) const;

double calcCovariance(const Statistic &other) const;

private:
vector<double> sample;
};

и реализовать что-то вроде:

double Statistic::calcCovariance(const Statistic &other) const
{
// TODO: use other.sample and sample here.
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector