0

在我的作业中,它指出程序必须具有/执行此操作:

使用 num 和 den 作为其私有数据定义一个 Fraction 类。包括用于将分数初始化为 0/1 的构造函数、复制构造函数、析构函数和用于重载赋值运算符的重载函数以及用于重载 << 和 >> 以输出和输入分数的友元函数(非成员)

定义一个名为 FracList 的类,其中包含私有成员 fracPtr、一个 Fraction 指针和保存 Fraction 对象数组大小的大小。

在 main 中,创建两个 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 类 >> 运算符设置为这样做)。

这是我程序中的相关代码。

来自分数类 (.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];

}
4

1 回答 1

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
于 2019-03-15T03:22:44.493 回答