Возникли проблемы с конструктором класса по умолчанию C ++

0

У меня возникли проблемы с пониманием методов конструктора по умолчанию в 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++, и ресурсы учебников, которые я прочитал по этому вопросу, были неясны. Кроме того, я думаю, что могу переоценить и сбить с толку. Любая помощь будет принята с благодарностью! Спасибо!

  • 1
    Если полином имеет нулевую степень, не имеет значения, какие значения находятся в массиве коэффициентов, так как у полинома нет термов, поэтому он будет выдавать ноль независимо от того, каков его вход. Инициализация массива до нуля все еще, вероятно, хорошая идея, и это будет считаться хорошей практикой
  • 0
    @wakjah полином "степень 0" имеет 1 коэффициент. «Степень» является высшей силой x настоящего; f(x) = 6 является примером многочлена степени 0
Теги:
arrays
constructor

3 ответа

0

Рассматривая связанный вопрос, похоже, у вас нет выбора, какое представление использовать. Предполагая это:

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)); // это заполняет каждый байт памяти массива нулем.

Функционально они производят одно и то же.

0

Вы должны хранить коэффициенты в массиве. У вас есть два общих варианта:

  • Используйте массив фиксированного размера, а также счетчик количества элементов массива "в использовании",
  • Используйте массив переменных размеров

Второй вариант проще и имеет больше смысла, поэтому ваш класс будет иметь член

std::vector<double> coefficients;

и в списке инициализаторов конструктора вы должны:

coefficients(1, 0.0)

что означает инициализировать его значением 1 член значения 0.0. Затем вы можете найти степень полинома, выполнив coefficients.size() - 1.

0

Я верю, что вы переусердствовали над проблемой. Так же, как многочлен с коэффициентом [0] = 10 равен "x = 10", один с coeff [0] = 0 равен "x = 0", если остальная часть массива инициализируется равным нулю.

В качестве новичка в C++ помните, что индексы массива от 0 до N-1, где N - размер массива.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню