gpt4 book ai didi

c++ - 在 C++ 中为多项式重载 i/o 运算符

转载 作者:行者123 更新时间:2023-11-28 06:16:52 25 4
gpt4 key购买 nike

我得到了这个项目,我必须重载 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;
}

当我运行程序时,它就死机了,我似乎找不到错误。有什么想法吗?

最佳答案

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++)然后赋值给它。您的成员 coeff 没有被初始化为任何有意义的东西(而且它现在的状态一开始就毫无意义)。

您应该使用 std::vector 而不是 double coef[]像这样:

struct polynomial {
std::vector<double> coef;
// No need for member varaible degree, vector knows its lengths
polynomial (const std::vector<double> &coeffs) : coef (coeffs) {}
};

然后定义您需要做一些有意义的事情的所有其他构造函数。或者,您可以完全省略构造函数并直接分配系数 vector 。然后你可以像这样的函数

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;
}

关于c++ - 在 C++ 中为多项式重载 i/o 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30106211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com