在我的作业中,它指出程序必须具有/执行此操作:
定义一个以num和den作为其私有数据的Fraction类。包括一个将分数初始化为0/1的构造函数,一个复制构造函数,一个析构函数以及用于重载赋值运算符的重载函数以及用于重载<<和>>以输出和输入分数的重载函数(非成员)
使用私有成员fracPtr定义一个名为FracList的类,该类具有Fraction指针和大小以保存Fraction对象数组的大小。
首先,创建两个FracList对象,询问用户要为每个列表分配多少个元素,并根据用户指定的数量从键盘中读取每个Fraction对象(使用>>运算符)。
该部分程序应如何运行的示例
为列表1输入分数的数量:3
输入清单2的分数数:4
为列表1输入3个分数:2/5 4/3 5/7
为列表2输入4个分数:5/8 5/4 3/8 4/9
main的主要部分是我遇到的问题,因为在FracList类中,我们使用的是Fraction类的一部分的指针,这对我的提取运算符造成了很多困惑。
我遇到的问题与main中代码的最后一部分有关,这很可能是由其他地方的其他错误引起的。 fracPtr是类FracList中的私有指针。但是,它被称为/初始化为小数* fracPtr。因此,我想,当我输入list1.fracPtr [i]时,它将引用Fraction类>>运算符,并允许用户输入分数(因为Fraction类>>运算符已设置为做)。
这是我程序中的相关代码。
来自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];
}
答案 0 :(得分:0)
找出问题的答案,并将答案发布给以后的读者。
代码应该看起来像这样(主要)
int size1 = 0; // Declare size variables as ints
int size2 = 0;
//int index = -1;
//Fraction obj;
cout << "Enter number of Fractions for list1: ";
cin >> size1; // Get the size of list 1
cout << "Enter number of Fractions for list2: ";
cin >> size2; // Get the size of list 2
FracList list1(size1); // Pass each size into its list object (can use as array)
FracList list2(size2);
size1 = list1.get_size(); // set the sizes equal to the size private variable
size2 = list2.get_size();
cout << "Enter " << size1 << " Fractions for list1: ";
for (int i = 0; i < size1; i++)
cin >> list1[i]; // Calls the operator to enter fractions
cout << "Enter " << size2 << " Fractions for list2: ";
for (int i = 0; i < size2; i++)
cin >> list2[i]; // Calls the operator to enter fractions