重複の可能性:
演算子のオーバーロード
私がやりたいのは、多項式で定数を追加する演算子をオーバーロードすることです。これがクラス定義です。
class polynomial
{
public:
polynomial();// default constructor
polynomial(double*,int);// parameterized constructor
polynomial(polynomial*);// copy constructor
~polynomial();//destructor
polynomial* const operator+(polynomial*);
polynomial* const operator+(double);
friend polynomial* const operator+(double,polynomial);
polynomial* operator-(polynomial*);
polynomial* operator-(const double);
polynomial* operator*(polynomial*);
polynomial* polynomial::operator*(const double);
friend ostream& operator<<(ostream&,polynomial*);
friend double evaluate(polynomial*,double);
friend double* extract(polynomial*);
polynomial* operator =(polynomial*);
int degree;
private:
double* polyNum;
};
組み込みクラスの定義にアクセスして、メンバー関数として必要な演算子を追加できないためです。非メンバー関数しかありません。しかし、そうしようとすると、「..'operator +' must have a least one form parameter of class type..」というエラーが表示されます。
friend polynomial* const operator+(double,polynomial*);
ただし、オブジェクトのポインターの代わりにオブジェクトを渡そうとすると、他の関数から戻るときに自動的にデストラクタが呼び出され、オブジェクト内のポインターが指すすべてのデータが消去されるという別の問題があります。
polynomial* const operator+(double constant,polynomial p)
{
-> return p+constant;
}
- p {degree=3 polyNum=0x00de8188 {1.0000000000000000} } 多項式
polynomial* const operator+(double constant,polynomial p)
{
return p+constant;
->
}
- p {度=3 polyNum=0x00de8188 {-2.6569842580370804e+303} } 多項式