gpt4 book ai didi

c++ - 在 C++ 中重载运算符 >>

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:17 24 4
gpt4 key购买 nike

#include<iostream>
using namespace std;
class term
{
public:
int exp;
int coeff;
};
class poly
{
public:
term* term_ptr;
int no_term;

poly(int d);
friend istream& operator>>(istream& in, poly& p);
friend ostream& operator<<(ostream& out, const poly& p);
friend poly operator+(const poly& p1, const poly& p2);
};
poly::poly(int d=0)
{
no_term = d;
term_ptr = new term[no_term];
}
istream& operator>>(istream& in, poly& p)
{
in>>p.no_term;
for(int i= 0; i<p.no_term; i++)
{
in>>(p.term_ptr+i)->coeff;
in>>(p.term_ptr+i)->exp;
}
return in;
}

我重载了输入运算符来输入对象。我面临的问题是当我连续输入两个对象时,第一个对象输入的数据成员发生变化。

int main(void)
{
poly p1, p2;
cin>>p1;
cin>>p2;
cout<<p1;
cout<<p2;
return 0;
}

如果输入是

 3
1 1
1 2
1 3
3
1 1
1 2
1 3

我得到的输出是

1 1
1 2
1 1
1 1
1 2
1 3

输出运算符函数为

ostream& operator<<(ostream& out, const poly& p)
{
out<<"coeff"<<" "<<"power"<<endl;
for(int i = 0; i< p.no_term; i++)
out<<(p.term_ptr+i)->coeff<<" "<<(p.term_ptr+i)->exp<<endl;
return out;
}

最佳答案

您最初分配了一个包含零个元素的数组。阅读对象时,您会阅读术语的数量,但不会重新分配术语数组。我个人建议使用合适的容器类型,例如 std::vector<term*>或者,实际上,std::vector<std::shared_ptr<term>> .如果你坚持使用数组,你需要这样的东西:

std::istream& operator>>(std::istream& in, poly& p)
{
if (in>>p.no_terms ) {
std::unique_ptr<term[]> terms(new term[p.no_terms]);
for(int i= 0; i<p.no_term; i++)
{
in >> terms[i].coeff;
in >> terms[i].exp;
}
if (in) {
delete[] p.term_ptr;
p.term_ptr = terms.release();
}
}
return in;
}

关于c++ - 在 C++ 中重载运算符 >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12968340/

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