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's 构建一个数组包装类。这是因为,管理strings 比管理 s 有一些额外的挑战int:-)。一旦你这样做了,你就可以轻松地为strings 做到这一点。

于 2013-04-22T23:34:29.293 回答
1
  • size和之间存在命名冲突size()
  • =使用, not复制 C++ 字符串strcpy(用于char*
  • 缺少MyArray::定义operator=
  • toCopy应该toAssignoperator=
  • 后面缺少分号sList = NULL
  • return *this;结尾不见了operator=
  • 在定义中size()this.size应该是sizethis->size(*this).size

所有这些错误都将由编译器发现(您可能需要启用警告以报告丢失的返回;g++使用该-Wall标志)。这只是了解编译器的错误消息并知道如何解决问题的问题。

于 2013-04-23T00:06:34.623 回答