C ++中的Array Wrapper类

时间:2013-04-22 23:17:16

标签: c++ arrays class wrapper

所以,我是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;
}

仍然需要编写操作符+函数,但我想在继续操作之前确保我的操作是有意义的。

2 个答案:

答案 0 :(得分:1)

您希望其他程序员(包括您)使用您的代码(即您正在创作的课程)吗?

编写示例程序以演示您的课程的使用。

示例程序用作基本测试集。您可以从以下开始。

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

您是否考虑过用户代码如何将(字符串?)元素放入MyArray类?

当前版本的代码还有其他几个问题。这是可以的,但是学习测试自己的代码对你来说很重要;你需要学习你对自己的代码有一些基本信心的技能(不一定是完美的代码),因为你不能总是要求别人测试你的代码。

建议:既然你提到你是新手,我建议你先为int构建一个数组包装类。这是因为,管理string比管理int :-)有一些额外的挑战。完成后,您可以轻松地为string执行此操作。

答案 1 :(得分:1)

  • sizesize()
  • 之间存在命名冲突
  • 使用=复制C ++字符串,而不是strcpy(用于char*
  • MyArray::
  • 的定义中缺少operator=
  • toCopy应该是toAssign
  • 中的operator=
  • sList = NULL
  • 后缺少分号
  • return *this;
  • 末尾遗失operator=
  • size()的定义中,this.size应为sizethis->size(*this).size

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