#include <typeinfo>
#include <iostream>
#include <math.h>
template <typename T>
class Polynomial
{
private:
Polynomial *termArray;
//int capacity;
//int terms;
T coef,exp;
public:
Polynomial()
{
termArray = new Polynomial[3];
};
~Polynomial();
void Print();
void CreateTerm(const T coef, const int exp);
};
template <typename T>
Polynomial<T>::~Polynomial()
{
delete []termArray;
}
template <typename T>
void Polynomial<T>::Print()
{
for(int i=0;i<3;i++)
std::cout << termArray[i].coef << " " << termArray[i].exp << std::endl;
}
template <typename T>
void Polynomial<T>::CreateTerm(const T coef,const int exp)
{
for(int i=0;i<3;i++)
{
termArray[i].coef = coef;
termArray[i].exp = exp;
}
}
int main()
{
Polynomial<double> f,g;
f.CreateTerm(-4.8,3);
f.CreateTerm(2.9,2);
f.CreateTerm(-3,0);
std::cout << "f = ";
f.Print();
g.CreateTerm(4.3,4);
g.CreateTerm(-8.1,0);
g.CreateTerm(2.2,3);
std::cout << "g = ";
g.Print();
return 0;
}
如上所述,可以编译和运行此代码。然而,当运行代码时,它无法打印任何我想要打印出来的值并进入长时间睡眠状态。(虽然我输入的内容并不会影响我的打字)
如何修改打印代码..请帮助我。
答案 0 :(得分:2)
这是你的构造函数:
Polynomial()
{
termArray = new Polynomial[3];
};
当您创建新的多项式时,您的代码会在构造函数中创建3个新闻多项式。对于这3个多项式中的每一个,您将再创建3个多项式!此时共有13个多项式对象。再次为新的添加3。这将继续,直到你的内存不足。更具体地说,当你的堆栈空间不足时,因为这些都是在那里分配的。
您的代码永远不会越过这一行,因为它会调用构造函数recursively:
termArray = new Polynomial[3];
还需要考虑其他一些事项:
Coefficient
。Polynomial
对象(quite literally your stack overflow bug)中的Polynomial
个对象数组,而是Coefficient
个对象中的Polynomial
个对象数组create_term()
内调用向量的push_back()
方法即可添加新系数