У меня возникли проблемы с пониманием методов конструктора по умолчанию в C++ и как написать один, чтобы он соответствовал потребностям моих методов. Мне было поручено создать простой массив, который мог бы представлять многочлены, такие как (n) x ^ (n) + a (n-1) x ^ (n-1) +... + a (0). Он должен быть массивом коэффициентов с коэффициентом a (i), который хранится в местоположении я массива. Коэффициенты представляют собой значения с плавающей запятой (потенциально отрицательные), поэтому массив должен иметь тип double. Он также должен иметь размер MAXPOLY (постоянная переменная, установленная на 50), ограничивая массив удерживающими многочленами с максимальной степенью MAXPOLY-1 (или 49).
Полные инструкции/описание назначения можно найти здесь: Начинающая полиномиальная программа в C++
Моя проблема заключается в создании конструктора по умолчанию для полиномиального объекта Poly. Конструктор класса по умолчанию предназначен для инициализации полинома константе 0, создавая объект класса, который является полиномом степени 0 из 0. При этом присваивание также отмечает, что пост-условие этого конструктора состоит в том, что все элементы массива коэффициента [] установлены в 0.0, и именно здесь возникает моя путаница. Должен сначала инициализировать весь массив для 0-MAXPOLY, а затем определить poly при 0? Или должно быть достаточно одного или другого? Как мне следует писать конструктор?
Прошу прощения, если этот вопрос кажется довольно очевидным, но я совершенно новый для C++, и ресурсы учебников, которые я прочитал по этому вопросу, были неясны. Кроме того, я думаю, что могу переоценить и сбить с толку. Любая помощь будет принята с благодарностью! Спасибо!
Рассматривая связанный вопрос, похоже, у вас нет выбора, какое представление использовать. Предполагая это:
class Poly
{...
// array for holding the coefficients of the poly
double coeff[MAXPOLY];
...
}
Затем ваш конструктор должен заполнить массив нулевыми значениями, например:
// Class constructor
Poly::Poly ()
{
//ADD YOUR CODE HERE
for( int i = 0; i < MAXPOLY; i++ )
coeff[i]=0.0;
}
Это самая явная демонстрация того, что происходит, хотя вы можете сократить код для инициализации массива примерно так:
memset (coeff, 0, sizeof (coeff)); // это заполняет каждый байт памяти массива нулем.
Функционально они производят одно и то же.
Вы должны хранить коэффициенты в массиве. У вас есть два общих варианта:
Второй вариант проще и имеет больше смысла, поэтому ваш класс будет иметь член
std::vector<double> coefficients;
и в списке инициализаторов конструктора вы должны:
coefficients(1, 0.0)
что означает инициализировать его значением 1
член значения 0.0
. Затем вы можете найти степень полинома, выполнив coefficients.size() - 1
.
Я верю, что вы переусердствовали над проблемой. Так же, как многочлен с коэффициентом [0] = 10 равен "x = 10", один с coeff [0] = 0 равен "x = 0", если остальная часть массива инициализируется равным нулю.
В качестве новичка в C++ помните, что индексы массива от 0 до N-1, где N - размер массива.
x
настоящего;f(x) = 6
является примером многочлена степени 0