FunctionクラスからPolynomialクラスを派生させるプログラムに取り組んでいます。私はほぼ完成していますが、最後の問題に直面しています。
「=」演算子を呼び出しています。関数mainでは、次のようになります。
f3 = f2 * 2;
f3とf2はどちらも多項式データ型です。乗算演算子もオーバーロードされており、動作することがテストされています。私のプログラムがこのポイントに達すると、クラッシュします。クラッシュのバックトレースは次のとおりです。
Program received signal SIGABRT, Aborted.
0x00000000 in ?? ()
(gdb) bt
#0 0x00000000 in ?? ()
#1 0x77cbf8c1 in ntdll!RtlUpdateClonedSRWLock ()
from /cygdrive/c/Windows/system32/ntdll.dll
#2 0x75ab0816 in WaitForSingleObjectEx ()
from /cygdrive/c/Windows/syswow64/KERNELBASE.dll
#3 0x000000ec in ?? ()
#4 0x00000000 in ?? ()
残念ながら、それは私にヒントを提供しません。
最後に、オーバーロードされた演算子=:です。
Polynomial& Polynomial::operator=(const Polynomial& rhs) {
if(this->a)
delete [] this->a;
this->setName(rhs.getName());
this->degree = rhs.degree;
a = new double[this->degree];
for(int i = 0; i < this->degree; i++)
{
this->a[i] = rhs.a[i];
}
return *this;
}
そして、クラスのヘッダーファイル。
class Polynomial : public Function
{
public:
Polynomial (const string& name = "unnamed");
Polynomial (const Polynomial& rhs);
void setCoefficients (int degree, ...);
int getDegree() const { return degree; }
double operator[] (int i) const;
double operator() (double x) const;
Polynomial operator* (double c) const;
Polynomial& operator*= (double c);
Polynomial& operator=(const Polynomial& rhs);
void write(ostream& outfile) const;
private:
double* a;
int degree;
};
Polynomial operator* (double c, const Polynomial& p);
コンストラクター:
(Polynomial::Polynomial (const string& name) {
a = new double[1];
a[0] = 0;
degree = 0;
return;
}
Polynomial::Polynomial (const Polynomial& rhs) {
//Null a, and then pass over to the overloaded = operator.
if(this->a)
delete [] this->a;
*this = rhs;
return;
}
必要なだけコードを共有したいと思います。助けてくれてありがとう!