通过map的方式封装菜单结构
时间: 2023-07-31 15:04:41 浏览: 37
封装菜单结构的方式可以使用一个类来实现。在这个类中,我们可以使用一个`std::map`成员变量来存储菜单选项和相应的操作。下面是一个简单的示例:
```C++
#include <iostream>
#include <map>
class Menu {
public:
Menu() {}
void addOption(int key, std::string value, void (*func)()) {
menu_[key] = value;
funcs_[key] = func;
}
void display() {
int choice;
do {
std::cout << "Please select an option:\n";
for (const auto& [key, value] : menu_) {
std::cout << key << ") " << value << std::endl;
}
std::cin >> choice;
if (menu_.find(choice) != menu_.end()) {
std::cout << "You selected: " << menu_[choice] << std::endl;
if (funcs_.find(choice) != funcs_.end())
funcs_[choice]();
}
else {
std::cout << "Invalid choice! Please select again." << std::endl;
}
} while (choice != 0);
}
private:
std::map<int, std::string> menu_;
std::map<int, void (*)()> funcs_;
};
// Example usage
void func1() {
std::cout << "Function 1 called!\n";
}
void func2() {
std::cout << "Function 2 called!\n";
}
int main() {
Menu menu;
menu.addOption(1, "Option 1", func1);
menu.addOption(2, "Option 2", func2);
menu.display();
return 0;
}
```
在上面的例子中,我们定义了一个名为`Menu`的类,其中包含了`std::map`成员变量`menu_`和`funcs_`,分别用于存储菜单选项和相应的操作。我们提供了一个`addOption()`函数,它可以添加一个菜单选项和相应的操作到`menu_`和`funcs_`中。在`display()`函数中,我们使用一个循环来显示菜单选项,并等待用户选择一个选项。如果用户输入的选项是有效的,则我们执行相应的操作。否则,我们提示用户重新选择。在这个例子中,操作是通过函数指针实现的,但是您可以使用任何适合的方法来执行操作。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)