所以,我是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;
}
仍然需要编写操作符+函数,但我想在继续操作之前确保我的操作是有意义的。
答案 0 :(得分:1)
您希望其他程序员(包括您)使用您的代码(即您正在创作的课程)吗?
编写示例程序以演示您的课程的使用。
示例程序用作基本测试集。您可以从以下开始。
int main() {
MyArray arr1( 5 );
MyArray arr2( arr1 );
}
您是否考虑过用户代码如何将(字符串?)元素放入MyArray
类?
当前版本的代码还有其他几个问题。这是可以的,但是学习测试自己的代码对你来说很重要;你需要学习你对自己的代码有一些基本信心的技能(不一定是完美的代码),因为你不能总是要求别人测试你的代码。
建议:既然你提到你是新手,我建议你先为int
构建一个数组包装类。这是因为,管理string
比管理int
:-)有一些额外的挑战。完成后,您可以轻松地为string
执行此操作。
答案 1 :(得分:1)
size
和size()
=
复制C ++字符串,而不是strcpy
(用于char*
)MyArray::
operator=
toCopy
应该是toAssign
operator=
sList = NULL
return *this;
operator=
size()
的定义中,this.size
应为size
,this->size
或(*this).size
所有这些错误都将由编译器发现(您可能需要启用警告以报告丢失的返回;在g++
上使用-Wall
标志)。只需了解编译器的错误消息并了解如何解决问题。