用c++实现Festival节日类,要求 1.节日有个不可重复的名字,同时包含一个日期 2.添加节日,删除节日 3.程序结束时自动释放所有节日对象 4.试图添加同名节日,抛出恰当异常
时间: 2024-04-14 21:30:34 浏览: 110
你好!对于你的要求,我可以帮你实现一个简单的C++节日类。以下是一个可能的实现:
```cpp
#include <iostream>
#include <stdexcept>
#include <vector>
class Festival {
public:
Festival(const std::string& name, const std::string& date) : name(name), date(date) {}
std::string getName() const {
return name;
}
std::string getDate() const {
return date;
}
private:
std::string name;
std::string date;
};
class FestivalManager {
public:
~FestivalManager() {
for (Festival* festival : festivals) {
delete festival;
}
}
void addFestival(const std::string& name, const std::string& date) {
for (Festival* festival : festivals) {
if (festival->getName() == name) {
throw std::invalid_argument("Festival with the same name already exists.");
}
}
festivals.push_back(new Festival(name, date));
}
void removeFestival(const std::string& name) {
for (auto it = festivals.begin(); it != festivals.end(); ++it) {
if ((*it)->getName() == name) {
delete *it;
festivals.erase(it);
return;
}
}
throw std::invalid_argument("Festival not found.");
}
private:
std::vector<Festival*> festivals;
};
int main() {
FestivalManager festivalManager;
try {
festivalManager.addFestival("New Year", "January 1st");
festivalManager.addFestival("Christmas", "December 25th");
festivalManager.addFestival("New Year", "January 1st"); // Trying to add a festival with the same name
} catch (const std::exception& e) {
std::cout << "Error: " << e.what() << std::endl;
}
festivalManager.removeFestival("Christmas");
return 0;
}
```
在这个实现中,我们首先定义了一个`Festival`类,它有一个不可重复的名字和日期。然后我们定义了一个`FestivalManager`类,它负责管理所有的节日对象。在`FestivalManager`类中,我们使用了一个`std::vector`来存储所有的节日对象,并在程序结束时释放所有的节日对象。
`FestivalManager`类提供了`addFestival()`和`removeFestival()`方法来添加和删除节日。在添加节日时,我们会检查是否已经存在同名的节日,如果是,则抛出一个恰当的异常(`std::invalid_argument`)。在删除节日时,我们会遍历节日列表,找到要删除的节日,并释放对应的内存。
在`main()`函数中,我们演示了如何使用`FestivalManager`类。我们先添加了两个节日("New Year"和"Christmas"),然后尝试添加一个同名的节日("New Year"),这会导致抛出异常。最后,我们删除了"Christmas"节日。
这只是一个简单的实现示例,你可以根据自己的需求进行扩展和修改。希望能对你有所帮助!如果还有其他问题,请随时提问。
阅读全文