Вступительное примечание : Я добровольно выбрал широкую тему. Вы знаете эту цитату об обучении кошки ловить рыбу, вот и все. Мне не нужен ответ на мой вопрос, мне нужны объяснения и советы. Я знаю, что вы, ребята, хороши в этом;)
Привет, ребята,
В настоящее время я внедряю некоторые алгоритмы в существующую программу. Короче говоря, я создал новый класс "Adder". Adder является членом другого класса, представляющего физический объект, фактически выполняющий исчисление, который вызывает adder.calc () со своими параметрами (просто список объектов, для которых выполняется математика).
Чтобы выполнить эту математику, мне нужны некоторые параметры, которые не существуют вне класса (но могут быть установлены , см. Ниже). Они не являются ни параметрами конфигурации, ни членами других классов. Это параметры D1 и D2, расстояния и три массива фиксированного размера: альфа, бета, дельта.
Я знаю, что некоторым из вас удобнее читать код, чем читать текст, так что вот вам:
class Adder
{
public:
Adder();
virtual Adder::~Adder();
void set( float d1, float d2 );
void set( float d1, float d2, int alpha[N_MAX], int beta[N_MAX], int delta[N_MAX] );
// Snipped prototypes
float calc( List& ... );
// ...
inline float get_d1() { return d1_ ;};
inline float get_d2() { return d2_ ;};
private:
float d1_;
float d2_;
int alpha_[N_MAX]; // A #define N_MAX is done elsewhere
int beta_[N_MAX];
int delta_[N_MAX];
};
Поскольку этот объект используется как член другого класса, он объявлен в * .h:
private:
Adder adder_;
Сделав это, я не смог инициализировать массивы (альфа / бета / дельта) непосредственно в конструкторе (int T [3] = {1, 2, 3};), не выполняя итерацию по всем трем массивам , Я думал поместить их в static const , но я не думаю, что это правильный способ решения таких проблем.
Вторым моим предположением было использование конструктора для инициализации массивов
Adder::Adder()
{
int alpha[N_MAX] = { 0, -60, -120, 180, 120, 60 };
int beta[N_MAX] = { 0, 0, 0, 0, 0, 0 };
int delta[N_MAX] = { 0, 0, 180, 180, 180, 0 };
set( 2.5, 0, alpha, beta, delta );
}
void Adder::set( float d1, float d2 ) {
if (d1 > 0)
d1_ = d1;
if (d2 > 0)
d2_ = d2;
}
void Adder::set( float d1, float d2, int alpha[N_MAX], int beta[N_MAX], int delta[N_MAX] ) {
set( d1, d2 );
for (int i = 0; i < N_MAX; ++i) {
alpha_[i] = alpha[i];
beta_[i] = beta[i];
delta_[i] = delta[i];
}
}
Мой вопрос: Было бы лучше использовать другую функцию - init () - которая инициализирует массивы? Или есть лучший способ сделать это?
Мой бонусный вопрос: Вы видели какие-то ошибки или плохую практику на этом пути?