1

したがって、私は C++ の初心者 (まったく新しい) であり、割り当てとして、配列ラッパーとして機能するクラスを作成する必要があります。私はとても新しいので、オーバーロードされた演算子などが機能するかどうかわからないので、私のコードがどのように見えるか教えてくれる人がいれば:

これはヘッダーになります。

class MyArray
{

private:
    string* sList;
    unsigned int size;

public:
    MyArray(const unsigned int size = 1);
    MyArray(const MyArray &toCopy);
    MyArray& operator=(const MyArray& toAssign);
    ~MyArray();
    //MyArray& operator+
    string& operator[](const int index);
    const int size();
};

そして、これが基になるコードになります。

MyArray::MyArray(const unsigned int initSize)
    : size(initSize)
{
    sList = new string[initSize];
    return;
}

MyArray::MyArray(const MyArray &toCopy)
    : size(toCopy.size)
{
    if(toCopy.sList)
    {
        sList = new string[size];
        for(int a=0; a<size; a++){
            strcpy(sList[a], toCopy.sList[a]);
        }

    }
    else sList = NULL;
    return;

}

MyArray& operator=(const MyArray& toAssign)
{
    if(this != &toAssign)
    {
        if(sList)
        {
            delete [] sList;
        }

        size = toAssign.size;

        if (toAssign.sList)
        {
            sList = new string[size];

            for(int a=0; a<size; a++){
                strcpy(sList[a], toCopy.sList[a]);
            }
        }
        else
        {
            sList = NULL
        }
    }
}

MyArray::~MyArray()
{
    delete [] sList;
    return;
}

string& MyArray::operator[](const int index)
{
    return sList[index];
}


const int MyArray::size()
{
    return this.size;
}

operator+ 関数はまだ作成する必要がありますが、先に進む前に、自分が持っているものが意味を成していることを確認したいと思います。

4

2 に答える 2

1

あなたのコード (つまり、あなたが作成しているクラス) を他のプログラマー (あなたを含む) にどのように使用してもらいたいですか?

クラスの使用方法を示すサンプル プログラムを作成します。

サンプル プログラムは、初歩的なテスト セットとして機能します。以下のように起動できます。

int main() {
    MyArray arr1( 5 );
    MyArray arr2( arr1 );
}

ユーザー コードが (文字列?) 要素をMyArrayクラスに配置する方法について考えたことはありますか?

現在のバージョンのコードには他にもいくつかの問題があります。最初はこれで問題ありませんが、独自のコードをテストする方法を学ぶことが重要です。コードのテストを常に誰かに依頼できるわけではないため、自分のコード (必ずしも完全なコードではない) に基本的な自信を持っているスキルを学ぶ必要があります。

提案: あなたは初心者だとおっしゃっていたので、int最初に の配列ラッパー クラスを作成することをお勧めします。これは、 の管理には、stringの管理よりもいくつかの追加の課題があるためintです :-)。それができたら、簡単にstrings を実行できます。

于 2013-04-22T23:34:29.293 に答える
1
  • と の間に名前の競合がsizeありますsize()
  • を使用して C++ 文字列をコピーします=(strcpyこれは 用ですchar*) 。
  • MyArray::の定義に欠落しているoperator=
  • toCopyにある必要がありtoAssignますoperator=
  • 後にセミコロンがありませんsList = NULL
  • return *this;の最後に行方不明operator=
  • の定義でsize()this.sizesizethis->sizeまたは(*this).size

これらの間違いはすべてコンパイラーによって発見されます (報告される戻り値の欠落に対する警告を有効にする必要がある場合があります。フラグをg++使用する場合)。-Wallコンパイラのエラー メッセージを理解し、問題を修正する方法を知っているだけです。

于 2013-04-23T00:06:34.623 に答える