【发布时间】:2018-02-07 15:05:05
【问题描述】:
class DSArray {
private:
int size;
string *dynamicArray;
public:
DSArray();
DSArray(int size, string []);
~DSArray();
int getSize() const;
void addEntry(string newString);
bool deleteEntry(string find);
string getEntry(const int index) const;
void operator = (const DSArray& obj);
string operator [] (int index);
friend ostream& operator << (ostream &out, const DSArray& array);
};
DSArray::DSArray(){
size = 0;
dynamicArray = NULL;
}
DSArray::DSArray(int size, string []){
dynamicArray = new string[size];
for (int i = 0; i < size; i++){
dynamicArray[i] = getEntry(i);
}
size = getSize();
}
DSArray::~DSArray(){
delete[] dynamicArray;
}
int DSArray::getSize() const{
return size;
}
void DSArray::addEntry(string newString){
string *tempPtr = dynamicArray;
dynamicArray = new string[size + 1];
dynamicArray[size].assign(newString);
for(int i = 0; i < size; i++){
dynamicArray[i] = tempPtr[i];
}
if(size > 0){
delete[] tempPtr;
}
size++;
}
ostream& operator << (ostream &out, const DSArray& array){
for (int i = 0; i < array.getSize(); i++)
out << array.dynamicArray[i];
return out;
}
bool DSArray::deleteEntry(string toDelete)
{
int index;
for(index = 0; index < size; index++)
{
if(dynamicArray[index] == toDelete) break;
}
if(index == size) return false;
string *newArray = new string[size--];
int i;
for(i = 0; i < index; i++) newArray[i] = dynamicArray[i];
for(int k = index + 1; k <= size; k++, i++) newArray[i] = dynamicArray[k];
delete [] dynamicArray;
dynamicArray = newArray;
return true;
}
string DSArray::getEntry(const int index) const{
static string emptyStr = "";
if(index > size){
return emptyStr;
}
else{
return dynamicArray[index];
}
}
void DSArray::operator = (const DSArray& obj){
DSArray temp(obj);
if(this->size != 0)
delete[] this->dynamicArray;
this->size = obj.getSize();
this->dynamicArray = new string [this->size];
for(int i = 0; i < this->size; i++)
this->dynamicArray[i] = obj.getEntry(i);
}
string DSArray::operator [] (int index){
string emptyString = "";
if (index >= size){
return emptyString;
}
return dynamicArray[index];
}
int main()
{
DSArray foods;
string x[] = {"Burrito", "Sushi", "Pizza"};
DSArray A(3, x);
cout << A;
A[3] = "Spaghetti";
foods.addEntry("Steak");
foods.deleteEntry("Sushi");
return 0;
}
我正在尝试在 main 中测试我的功能,但它实际上并没有在控制台中显示任何内容。有人告诉我,我的构造函数没有正确设置大小,因为调用 getSize 会返回尚未初始化的对象大小。我该如何解决这个问题?还有谁知道 getEntry 函数是否返回 null 而不是空字符串?我的作业说它应该返回一个空值,但是,当我返回一个空值时,它会给我一个运行时错误。任何帮助表示赞赏。谢谢!
【问题讨论】:
-
您的构造函数尝试通过
getEntry初始化dynamicArray,而后者又从相同的dynamicArray中读取。构造函数有两个参数 - 为什么你从不使用第二个参数?你甚至没有给它起名字。 -
size = getSize()在这里,您从尚未初始化的数据成员this->size中读取数据,并将生成的随机垃圾分配给局部变量size。而你应该做的恰恰相反。不要混淆自己,给不同的东西起不同的名字。
标签: c++ arrays string pointers