В моем назначении говорится, что программа должна иметь / сделать следующее:
Определить класс Fraction с num и den в качестве своих личных данных.Включите конструктор для инициализации дроби 0/1, конструктор копирования, деструктор и функции перегрузки для перегрузки оператора присваивания, а также функции-друзья (не являющиеся членами) для перегрузки << и >> для вывода и ввода дроби
Определите класс с именем FracList с закрытыми членами fracPtr, указателем Fraction и размером для хранения размера массива объектов Fraction.
В основном, создайте два объекта FracList, спросите пользователя, сколько элементов выделить для каждого списка, прочитайте столько объектов Fraction с клавиатуры, сколько указано пользователем в каждом (используя оператор >>).
Пример того, как должна выполняться эта часть программы
Введите число фракций для списка 1: 3
Введите число фракций для списка 2: 4
Введите 3 дроби для списка 1: 2/5 4/3 5/7
Введите 4 дроби для списка 2: 5/8 5/4 3/8 4/9
Главное в том, где я сталкиваюсь с проблемами, будьпотому что в классе FracList мы используем указатель, который является частью класса Fraction, что вызывает у меня большую путаницу с операторами извлечения.
Проблема, с которой я сталкиваюсь, связана с последней частью кода в main, которая вполне может быть вызвана другими ошибками в других местах.fracPtr является частным указателем в классе FracList.Однако он называется / инициализируется как Fraction * fracPtr.Я бы подумал, что из-за этого он будет ссылаться на оператор класса Fraction >>, когда я буду вводить list1.fracPtr [i], и позволять пользователю вводить дроби (как установлено для оператора класса Fraction >>).
Вот соответствующий код из моей программы.
Из класса дроби (.cpp)
istream& operator>> (istream& in, Fraction& f)
{
char slash;
in >> f.den >> slash >> f.num;
f.reduce();
return in;
}
Fraction Fraction::get_reduce()
{
this->reduce();
return *this;
}
void Fraction::reduce()
{
if (num == den)
num = den = 1;
else
for (int i = num; i > 1; i++)
if (num % i == 0 && den % i == 0)
{
num /= i;
den /= i;
}
}
(. H)
friend istream& operator>>(istream& in, Fraction& f);
public:
Fraction(int = 0, int = 1);
private:
int num, den;
void reduce();
Из класса FracList
(. Cpp)
istream& operator >> (istream& in, const FracList& List)
{
for (int i = 0; i < List.size; i++)
in >> List.fracPtr[i];
return in;
}
void FracList::set_ptr(Fraction* p)
{
Fraction* fracPtr = p;
}
Fraction* FracList::get_ptr()
{
return fracPtr;
}
// Default Constructor
FracList::FracList(int s)
{
size = s;
fracPtr = new Fraction[size];
}
FracList::FracList(const FracList& List)
{
size = List.size;
fracPtr = new Fraction[size];
for (int i = 0; i < size; i++)
fracPtr[i] == List[i];
}
int FracList::get_size() const
{
return size;
}
FracList& FracList::operator=(const FracList& List)
{
if (*this != List)
{
delete [] fracPtr;
size = List.size;
fracPtr = new Fraction[size];
for (int i = 0; i < size; i++)
fracPtr[i] = List[i];
}
return *this;
}
(. H)
friend istream& operator >> (istream& in, const FracList& List);
public:
int get_size() const;
FracList& operator=(const FracList& List);
void set_ptr(Fraction* p);
Fraction* get_ptr();
FracList(int size = 0);
FracList(const FracList& List)
private:
int size;
Fraction *fracPtr;
(основной)
int main()
{
int size1;
int size2;
FracList list1;
FracList list2;
//Fraction* obj;
cout << "Enter number of Fractions for list1: ";
cin >> size1;
cout << "Enter number of Fractions for list2: ";
cin >> size2;
size1 = list1.get_size();
size2 = list2.get_size();
for (int i = 0; i < size1; i++)
cout << "Enter " << size1 << "Fractions for list1: ";
cin >> list1.fracPtr[i];
}