我得到了这个项目,我必须重载i / o运算符来读写多项式。不幸的是,我似乎无法让它发挥作用。
我有头文件:
#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
#include <iostream>
using namespace std;
class Polynomial
{
public:
Polynomial();
Polynomial(int degree, double coef[]);
int degree;
double coef[ ];
friend istream& operator>>(istream&,Polynomial& );
friend ostream& operator<<(ostream&,const Polynomial&);
virtual ~Polynomial();
};
#endif // POLYNOMIAL_H
和cpp文件:
#include "Polynomial.h"
#include<iostream>
#include<string>
using namespace std;
Polynomial::Polynomial()
{
//ctor
}
Polynomial::~Polynomial()
{
//dtor
}
Polynomial::Polynomial(int d, double c[])
{
degree = d;
double coef [degree+1];
for(int i = 0; i < d+1; i++)
{
coef[i] = c[i];
}
}
istream& operator>>(istream& x, const Polynomial& p)
{
cout<<"The degree: ";
x>>p.degree;
for(int i = 0; i < p.degree+1; i++)
{
cout<<"The coefficient of X^"<<i<<"=";
x>>p.coef[i];
}
return x;
}
ostream& operator<<(ostream& out, const Polynomial& p)
{
out << p.coef[0];
for (int i = 1; i < p.degree; i++)
{
out << p.coef[i];
out << "*X^";
out << i;
}
return out;
}
在名称中,我试图读取多项式,然后写另一个:
#include <iostream>
using namespace std;
#include "Polynomial.h"
int main()
{
Polynomial p1();
cin >> p1;
int degree = 2;
double coef [3];
coef[0]=1;
coef[1]=2;
coef[3]=3;
Polynomial p(degree, coef);
cout<<p;
return 0;
}
当我运行该程序时,它只是冻结,我似乎无法找到错误。 有什么想法吗?
答案 0 :(得分:1)
Polynomial::Polynomial(int d, double c[])
{
degree = d;
double coef [degree+1];
for(int i = 0; i < d+1; i++)
{
coef[i] = c[i];
}
}
在这里,您创建本地数组coef
(使用非标准C ++ btw),然后分配给它。你的会员coeff
没有被初始化为任何有意义的东西(并且在一开始就没有任何意义)。
而不是double coef[]
,您应该使用std::vector
,如下所示:
struct polynomial {
std::vector<double> coef;
// No need for member varaible degree, vector knows its lengths
polynomial (const std::vector<double> &coeffs) : coef (coeffs) {}
};
然后定义所有其他构造函数,你需要做一些有意义的事情。或者,您可以完全省略构造函数并直接分配系数向量。然后你可以举例如
这样的函数int degree (const polynomial &p) {
return p.coef.size() - 1;
}
或
std::ostream &operator << (std::ostream &out, const polynomial p) {
if (p.coef.size() == 0) {
out << "0\n";
return out;
}
out << p.coeff[0];
for (int i = 1; i < p.coef.size(); ++i)
out << " + " << p.coef[i] << "*X^i";
out << "\n";
return out;
}
答案 1 :(得分:0)
(1)
double coef[];
这是在堆栈上具有未调整大小/动态大小的数组的非标准方法。你最好给数组一些大小,或者让它成为指针并自己分配内存;或使用vector<double>
<强>(2)强>
您正在构造函数中创建局部变量,这将隐藏类中的成员变量。如果使用指针方法,则需要在构造函数中正确分配它。无论采用哪种方法,您都应该使用零来初始化(成员)变量coef
。
(3)
Polynomial p1();
这有效地声明了一个名为p1
的函数,它会返回一个Polynomial
和而不是一个tyoe Polynomial
的变量。您可能想要使用:
Polynomial p1;