自分自身のクラス文字列を作成しようとしています。 オペレータのオーバーロードに関する問題があります。演算子が自分の文字列にオーバーロードする(+ =、=)
My_string.h
#include <cstring>
#include <iostream>
class My_string
{
private:
char *value;
public:
My_string();
My_string(char *);
~My_string();
My_string operator +=(const My_string&);
My_string operator =(const My_string&);
void show()const;
};
My_string.cpp + =と=演算子をオーバーロードする方法
#include "stdafx.h"
#include "My_string.h"
My_string::My_string()
{
value = new char[1];
strcpy(value, "");
}
My_string::My_string(char * r_argument)
{
value = new char[strlen(r_argument) + 1];
strcpy(value, r_argument);
}
My_string::~My_string()
{
delete[]value;
}
My_string My_string::operator+=(const My_string &r_argument)
{
char * temp_value = new char[strlen(value) + strlen(r_argument.value) + 1];
strcpy(temp_value, value);
strcat(temp_value,r_argument.value);
delete[]value;
value = new char[strlen(value) + strlen(r_argument.value) + 1];
strcpy(value, temp_value);
delete[]temp_value;
return *this;
}
void My_string::show() const
{
std::cout << value << std::endl;
}
My_string My_string::operator =(const My_string & r_argument)
{
delete[] value;
value = new char[strlen(r_argument.value)+1];
strcpy(value, r_argument.value);
return *this;
}
?彼らは両方のランタイムエラーが発生します。私はすべての動的に割り当てられたメモリにする必要があります。
デバッグアサーションが失敗しました! ... 式:_CrtisValidHeapPointer(ブロック)。
デバッガでコードをライン単位でisnpectするとき、あなたは何を観察しましたか? –
「ランタイムエラー」とは何ですか?それに応じて質問を編集してください。 –
@ aleshka-batmanこれらの演算子の使い方を示す必要があります。たとえば、コピー代入演算子は明らかに間違っています。また、コピーコンストラクタを定義する必要があります。 –