2014-01-03 1 views
0

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

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

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

Если вы хотите, чтобы ваша приватная переменная 'vector' была доступна из других объектов того же класса, вы можете сделать ее защищенной, а не частной. – Linuxios

+0

Вы можете выставить переменную 'sample', которую вы уже имеете. – STLDeveloper

+1

Лучший дизайн - не использовать классы вообще. – juanchopanza

ответ

0

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

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

Accessor образцу:

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. 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^