割り当ては、動的な cstring (null で終了する char 配列) を実装するクラスを作成することです。デフォルトのコンストラクターは空の配列を作成する必要があり、サイズ n の配列を作成するオーバーロードされたコンストラクターも必要です。関数も必要です。これにより、配列がより大きなサイズに拡張されます (彼はこれをクラスに含める必要があると言いましたが、後の割り当てまで使用しません)。また、このクラスの 2 つのバージョンを作成することになっています。1 つのバージョンでは、等価演算子をメンバー関数としてオーバーロードし、2 番目のバージョンでは、等価演算子を非メンバー関数としてオーバーロードします。
これは簡単に思えるので、何かが奇妙に感じます。
メンバー版では、2 つのクラス サイズが等しい場合に true を返すように設定しました。
bool CSTR::operator ==(const CSTR & rhs) {
return (size == rhs.size);
}
非メンバー バージョンの場合、サイズを整数として返すメンバー関数を作成し、演算子がオーバーロードされたときにそれらを比較しました。
bool operator ==(const CSTR2 & CSTR2_1, const CSTR2 & CSTR2_2) {
return (CSTR2_1.getSize() == CSTR2_2.getSize());
}
外部からの入力なしにこれを提出するのはちょっと怖いです。なぜなら、私のこの解決策は、クラスで行ってきたすべてのものと比較して単純すぎるように思えるからです。後の課題のためにこのプログラムを拡張する予定であることは承知していますが、ここで私が見逃しているものがあれば、素晴らしい情報を提供してください。
cstringを比較するために使用しようとしているコードは次のとおりです。注: 割り当ての説明には、値を cstring に入力することについて何も述べていません。
#include "CSTR.h"
#include <cstring>
using namespace std;
class CSTR {
public:
CSTR();
CSTR(unsigned int n);
~CSTR();
bool operator ==(const CSTR & rhs);
private:
unsigned int size;
char *elems;
bool grow(unsigned int newSize);
};
=================================
CSTR::CSTR() {
size = 0;
elems = new char [0];
}
CSTR::CSTR(unsigned int n) {
if (n > 0) {
size = n;
elems = new char [size];
}
else {
size = 0;
elems = new char [0];
}
}
CSTR::~CSTR() {
delete [] elems;
}
bool CSTR::operator ==(const CSTR & rhs) {
return ((elems == rhs.elems) == 0);
}
CSTR の 2 つのオブジェクトを異なるサイズで初期化しましたが、等価性をテストすると、それらが等しいことが返されます。