我有两个类PolynomFraction

我需要为Polynom做一个模板,以便使用FractionPolynom中的系数,例如:3/4 x^0 + 5\6 x^1等。

我了解如何使用doubleint这样的简单类型,但是我不知道如何在班级上使用它,也找不到关于该主题的材料。

class Fraction {
private:
    int numerator, denominator;
public:
    Fraction();
    Fraction(int, int);
    Fraction(int);
}


template<class T>
class PolynomT {
private:
    int degree;
    T *coef;
public:
    PolynomT();
    explicit PolynomT(int, const T * = nullptr);
    ~PolynomT();
};

template<class T>
PolynomT<T>::PolynomT(int n, const T *data): degree(n) {
    coefA = new T[degree+1];
    if (data == nullptr) {
        for (int i = 0; i < degree+1; ++i)
            coefA[i] = 0.0;
    }
    else {
        for (int i = 0; i < degree + 1; ++i)
            coefA[i] = data[i];
    }
}



/*Problem here*/

int main() {

    PolynomT<Fraction> a(); // what need to pass on here in arguments?
                            // how should the constructor look like?
    /*Example*/
    PolynomT<Fraction> b();

    PolynomT<Fraction> c = a + b; // or something like this.
}


那么,如何在Fraction中为PolynomT做类构造函数,以及如何为此重载运算符?

最佳答案

出现coefA[i] = 0.0构造函数中的PolynomT分配问题是因为Fraction没有采用双精度的构造函数,也不是采用双精度的赋值运算符。有几种可能的解决方案。

std::vector从原始内存管理更改为coefA

std::vector<T> coefA;
// Then resize appropriately in the constructor


这将自动使用默认的构造对象填充所有元素,因此如果data == nullptr则不需要执行任何操作。

另一种可能性是将分配更改为

coefA[i] = T();


这将为类型分配一个默认的构造对象(双精度为0.0)。

What are the basic rules and idioms for operator overloading具有有关重载运算符的详细信息。

08-24 18:21