Я пытаюсь выяснить это назначение из своего класса уровня 2. Мы должны создать класс под названием Number, полученный из std :: string. единственным кодом этого класса является два конструктора, по умолчанию и один, который принимает строку в качестве аргумента. у меня есть:Установка члена данных для класса, производного от класса, полученного из std :: string, до значения
class Number : public string {
public:
Number();
Number(string set);
}
Конструкторы затем кодируется как:
Number::Number() : string("0") { } // default constructor sets data string to "0"
Number::Number(string set) : string(set) { }
до сих пор так хорошо. Затем мы должны взять два класса, которые мы разрабатывали, Double и Integer, и выводить их из Number. Внутри этих двух классов мы использовали двойной и int соответственно как элемент данных. Теперь из-за наследования мы должны иметь встроенный раздел данных (строка). Проблема, с которой я столкнулась, заключается в том, что все мои перегрузки operator =() теперь «рекурсивные на всех путях», что приводит к переходу stackoverflow во время выполнения. Я покажу пример конструктора Double, который принимает строку, и функцию equals, которая вызывает бесконечную рекурсию.
Double::Double(string d) : Number(d)
{
// overloaded constructor that takes a string argument
if (isNaN(d)) {
*this = "0.0";
}
else {
*this = d;
}
// used for setting the value of a data member with a string
void Double::operator=(string d)
{
if (isNaN(d)) {
*this = "0.0";
}
else {
*this = d;
}
}
}
Я вижу, где рекурсии происходит, как * это звонит перегруженные =, который называет себя, так как я использую * это в самой функции =. Итак, каков будет правильный синтаксис для установки элемента данных в заданное значение. До этого было только это-> dataMemberName = заданное значение соответствующего типа.
Следует отметить, что мои нестроковые конструкторы действительно установить значение в инстанс объекта: Double::Double(int d) : Number(to_string(d)){}
, но второй я пытаюсь сделать что-нибудь с ними, + - * /, функция = называется, а затем ошибка повторится.
Следует отметить, что мои нестрочные конструкторы устанавливают значение объекта instanced : Двойной :: Двойной (int d): Number (to_string (d)) {}, но второй я пытаюсь что-то с ними сделать, + - * /, вызывается функция =, а затем ошибка повторяется снова. – DRoc101
Если вы хотите добавить информацию к вашему вопросу, измените вопрос. Не используйте комментарии для добавления информации. – Lehu
Неплохая практика заключается в том, что они производятся из 'std :: string' или других стандартных контейнеров, они не предназначены для этого. Обычно у вас просто есть переменная-член 'std :: string'. –