请用c++实现Festival节日类 节日有个不可重复的名字,同时包含一个日期添加节日删除节日 程序结束时自动释放所有节日对象 试图添加同名节日,抛出恰当异常
时间: 2024-04-12 17:26:47 浏览: 58
好的,以下是用C++实现的节日类示例:
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <stdexcept>
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;
}
};
class FestivalManager {
private:
std::vector<Festival*> festivals;
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::runtime_error("Festival with the same name already exists.");
}
}
Festival* newFestival = new Festival(name, date);
festivals.push_back(newFestival);
}
void removeFestival(const std::string& name) {
for (size_t i = 0; i < festivals.size(); i++) {
if (festivals[i]->getName() == name) {
delete festivals[i];
festivals.erase(festivals.begin() + i);
return;
}
}
}
};
int main() {
FestivalManager manager;
try {
manager.addFestival("New Year", "January 1");
manager.addFestival("Christmas", "December 25");
manager.addFestival("New Year", "January 1"); // Throws an exception
} catch (const std::exception& e) {
std::cout << "Exception: " << e.what() << std::endl;
}
manager.removeFestival("Christmas");
return 0;
}
```
这个示例中,我们定义了一个`Festival`类来表示节日。该类具有一个不可重复的名字和一个日期。然后,我们创建了`FestivalManager`类来管理节日对象。`FestivalManager`类使用一个`std::vector`来存储节日对象,并在添加节日时检查是否已存在相同名字的节日。如果存在相同名字的节日,就抛出一个恰当的异常。
在`main`函数中的示例代码展示了如何使用`FestivalManager`类。首先添加了两个节日对象,然后尝试添加同名的节日对象,这会抛出一个异常。最后,删除了一个节日对象。
请注意,为了确保在程序结束时释放所有节日对象,我们在`FestivalManager`的析构函数中循环删除所有节日对象。这样可以确保在程序结束之前释放所有动态分配的节日对象,避免内存泄漏。
阅读全文