初めて演算子のオーバーロードを使用していますが、いくつかの問題が発生しています。多項式を項の配列として格納するクラスを作成し、operator+ をオーバーロードして 2 つの多項式を一緒に追加しようとしました。operator+ 関数がオブジェクトを返そうとするたびに、プログラムが中断します。
問題:
class Polynomial
{
friend int coefficient( std::string & );
friend int exponent( std::string );
public:
explicit Polynomial( size_t = 3 ); // default constructor
~Polynomial(); // destructor
void set( std::string[] ); // sets values of ptr
std::string get(); // returns string of values from extracted from ptr
Polynomial operator+( const Polynomial & ); // allows summation of objects
private:
size_t size; // holds the size of array ptr[]
std::string *ptr; // points to first element of ptr[]
};
int main()
{
Polynomial p1(3);
Polynomial p2 = p1;
}
Polynomial::someMemberFunction( Polynomial1 + Polynomial2 );
また、合計のデータメンバーにアクセスしようとすると関数が壊れptr[]
、デバッガーが返されるような関数に渡そうとすると、
次のようになります。Unhandled exception at 0x543B6D46 (msvcp110d.dll) in SchoolProject.exe: 0xC0000005: Access violation reading location 0xFEEEFEEE.
なぜこれを行っているのかわかりません。どんな提案も受け付けています。
編集:
その答えは、オブジェクトを適切にコピーして代入するために、コピー コンストラクターとオーバーロードされた代入演算子を明示的に定義する必要があったということです。オーバーロードされた operator+ は暗黙のコピー コンストラクターと operator= を呼び出していましたが、これらは *ptr データ メンバーが指す情報をコピーできませんでした。質問のテキストを編集して、無関係な情報を削除しました。