【发布时间】:2021-03-21 09:44:14
【问题描述】:
我有一个指向 Building 对象的指针数组,如下所示:
class Building {
int id ;
int year;
double price;
char* adress;
};
我想要做的是通过id 使用operator- 从数组中删除对象,但我真的不知道该怎么做。我的列表类如下所示:
class List {
Building* buildingList[10];
static int buildingNr;
public:
List operator-(int id) {
bool exists = false;
int index;
for(int i = 0; i < buildingNr; i++)
if (buildingList[i]->getId() == id) {
exists = true;
index = i;
cout << "Building " << index << " was deleted." << endl;
}
if (exists) {
delete buildingList[index];
buildingList[index] = buildingList[buildingNr];
buildingList[buildingNr] = NULL;
buildingNr--;
}
else throw - 1;
}
};
int List::buildingNr = 0;
我知道有更简单的方法可以做到这一点,比如使用std::vector,但这是一个分配,我必须使用重载的operator- 和一个指针数组以及Building 类来完成它必须看起来像那样。
我也有operator+,它向数组添加一个元素,效果很好。
【问题讨论】:
-
不是 100% 清楚您的要求,但假设
buildingNr是列表中的项目数,buildingList[buildingNr]将超出范围。你可以先buildingNr--或buildingList[buildingNr-1]。 -
一些方便的阅读:What are the basic rules and idioms for operator overloading? 其中包含的智慧将帮助您正确掌握操作员的基本形状。
-
将
char *替换为std::string。字符数组很麻烦,尤其是当您必须为结构动态分配它们时。 -
在重载运算符之前要问自己的一个问题是“这种行为有意义吗?”我怀疑你在这件事上没有太多发言权,因为这是家庭作业,但总是需要考虑。让操作符
-执行查找和删除操作会使源代码更易于阅读吗? -
首先我做了一个删除项目的方法,但是老师明确说我们必须重载-操作符才能从列表中删除对象。问题是我不知道如何从指针数组中删除一个对象,因为它是动态分配的。我应该使用 delete/delete[] 还是不使用它们并将指针设置为 NULL?
标签: c++ arrays object pointers overloading